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:谢谢您的改进!我将编辑我的答案,因为您的方式更好!