2016-08-16 75 views
1

我發現這個代碼在某些庫:不可轉換類型;不能將'Comparator <T>'轉換爲'Comparator <?超級對象>」

public static <T> List<T> sort(
     Collection<T> collection, 
     Comparator<T> comparator) 
    { 
     Object[] a = collection.toArray(new Object[collection.size()]); 
     //noinspection unchecked 
     Arrays.sort(a, (Comparator<? super Object>) comparator); 
     return cast(Arrays.asList(a)); 
    } 

我發誓檢查

不可兌換的類型;不能投java.util.Comparator<T>到 「java.util.Comparator<? super java.lang.Object>

在什麼情況下該代碼可以工作?

+0

這是錯誤代碼。他們應該使用列表並使用'Collections.sort'而不是使用數組並依靠這樣的擦除。 – user2357112

+0

這在javac和eclipse中編譯時會發出警告。你使用什麼「檢查器」? – shmosel

+0

我的不好;我現在意識到這是別人可怕的庫代碼。它可以在任何情況下工作,因爲您保證「比較器」和「集合」的兼容性。這只是一個非常糟糕的實現 - 它可能早於仿製藥並已被移植? –

回答

1

要回答該問題,代碼無法工作。

我建議做以下修改:

public static <T> List<T> sort(Collection<T> collection, Comparator<T> comparator) { 
    List<T> a = new ArrayList<T>(collection); 
    a.sort(comparator); 
    return a; 
} 

將修復編譯錯誤一舉了這場可怕。

免責聲明:因爲它是在翻閱我的手機上的代碼可能無法編譯或工作(但有一個合理的機會,將工作)

+1

@boris老習慣難改:/ – Bohemian

+0

這段代碼不是OP的,他也沒有試圖修復它。 – shmosel

+2

這與OP的代碼完全不同。 OP的代碼返回一個有序的副本。此代碼就地對列表進行排序(如果集合是列表)。 –

相關問題