我們正在將現有代碼從Java 1.5遷移到Java 8,並且在使用-Xlint進行編譯時遇到了類似「未經檢查的調用compare(T,T)
作爲原始類型Comparator
的成員「。作爲原始類型成員比較(T,T)的未經檢查的調用Comparator
我大致瞭解,我需要以某種方式告訴我將傳遞給Comparator
哪種數據類型,但我使用泛型,因此我可以傳入不同的數據類型,所以如何消除此警告。
這裏是我的代碼片段在那裏我看到這樣的警告:
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--) {
這麼多的問題。 (爲你的'比較器'添加一個類型參數。) –