Java 列表中的泛型可比项有问题

Java 列表中的泛型可比项有问题,java,generics,Java,Generics,我想让下面的方法不显示关于使用原始类型的警告,但我无法找出语法来告诉它做我想做的事情。以下是当前的方法: static long countSplitInversions(List<? extends Comparable> list) { long inversions = 0; final int leftLimit = list.size() / 2; int left = 0; int right = leftLimit; for

我想让下面的方法不显示关于使用原始类型的警告,但我无法找出语法来告诉它做我想做的事情。以下是当前的方法:

static long countSplitInversions(List<? extends Comparable> list) {
    long inversions = 0;

    final int leftLimit = list.size() / 2;
    int left = 0;
    int right = leftLimit;

    for (int i = 0; i < list.size(); i++) {
        if (left == leftLimit || right == list.size()) {
            break;
        }
        if (list.get(left).compareTo(list.get(right)) <= 0) {
            left++;
        } else {
            right++;
            inversions += leftLimit - left;
        }
    }

    return inversions;
}

static long countSplitInversions(List考虑将您的方法签名更改为

static <T extends Comparable<? super T>> long countSplitInversions(List<T> list) {

static考虑将方法签名更改为

static <T extends Comparable<? super T>> long countSplitInversions(List<T> list) {

static您是指警告还是编译器错误

您当前的代码已经产生了警告,但是如果您是指编译器错误,正如您在最后所建议的,那么您需要为您的可比较边界指定一个类型参数

有点像这样会像您建议的那样生成编译器错误

static long countSplitInversions(List<? extends Comparable<?>> list) {
 / /...
}
static long countSplitInversions(列表>列表){
/ /...
}
但那将是毫无意义的,你不能用你的可比对象做任何事情


因此,正如另一个答案所示,您可能需要方法的类型参数。

您的意思是警告还是编译器错误

您当前的代码已经产生了警告,但是如果您是指编译器错误,正如您在最后所建议的,那么您需要为您的可比较边界指定一个类型参数

有点像这样会像您建议的那样生成编译器错误

static long countSplitInversions(List<? extends Comparable<?>> list) {
 / /...
}
static long countSplitInversions(列表>列表){
/ /...
}
但那将是毫无意义的,你不能用你的可比对象做任何事情


因此,正如另一个答案所建议的那样,您可能需要为您的方法提供一个类型参数。

Bah,我不敢相信它这么简单,我需要再次阅读通用文档。感谢您的帮助!为了获得最佳结果,请使用
@newacct:谢谢您的改进!我将编辑我的答案,因为您的方式更好!Bah,我不敢相信它是如此很简单,我需要再次阅读通用文档。感谢您的帮助!要获得最佳效果,请使用
@newacct:谢谢您的改进!我将编辑我的答案,因为您的方式更好!