【发布时间】:2017-06-13 20:56:54
【问题描述】:
我们正在将现有代码从 Java 1.5 迁移到 Java 8,在使用 -Xlint 进行编译时,我遇到了诸如“未经检查地调用 compare(T,T) 作为原始类型 Comparator 的成员”之类的警告。
我大致了解我需要以某种方式告诉我要传递给Comparator 的数据类型,但我使用的是泛型,所以我可以传递不同的数据类型,那么我该如何消除这个警告。
这是我看到此警告的代码的 sn-p:
private static void mergeSort(Object[] source, int[] src,int[] dest,
int low, int high, int off, Comparator c) {
int length = high - low;
for (int i=low; i<high; i++)
for (int j=i; j>low && c.compare(source[dest[j-1]], source[dest[j]])>0; j--) {
int t = dest[j];
dest[j] = dest[j-1];
dest[j-1] = t;
}
return;
}
而且,这被称为:
public void setSort( Comparator<T> comparator) {
List<T> currentList = getCurrentList();
int[] dst = new int[currentList.size()];
for (int i=0; i< currentList.size(); i++)
dst[i]=i;
int [] src = dst.clone();
mergeSort (currentList.toArray(), src, dst,0, dst.length, 0, comparator );
}
既然我已经在setSort() 方法中说Comparator<T> comparator,为什么我仍然收到以下错误?
warning: [unchecked] unchecked call to compare(T,T) as a member of the raw type Comparator [multiant] for (int j=i; j>low && c.compare(source[dest[j-1]], source[dest[j]])>0; j--) {
【问题讨论】:
-
不使用原始类型就可以避免很多问题。 (将类型参数添加到您的
Comparator。)
标签: java generics java-8 comparator raw-types