2015-09-24 31 views
-1

我不明白爲什麼我得到一個Unchecked cast from Object to Compareable<Object>,因爲它位於僅輸入區域內,如果該實例是可比較類型的。有人可以向我解釋這個,也許給一個解決方案,謝謝。爲什麼「未選中...」

我的代碼看起來像這樣。問題是,在8號線和9:

public int compare(Object one, Object two) { 

if (one instanceof Vector && two instanceof Vector) { 
    Vector<? extends Object> vOne = (Vector<?>)one; 
    Vector<? extends Object> vTwo = (Vector<?>)two; 
    Object oOne = vOne.elementAt(index); 
    Object oTwo = vTwo.elementAt(index); 

    if (oOne instanceof Comparable && oTwo instanceof Comparable) { 
    Comparable<Object> cOne = (Comparable<Object>)oOne; 
    Comparable<Object> cTwo = (Comparable<Object>)oTwo; 
    if (ascending) { 
     return cOne.compareTo(cTwo); 
    } else { 
     return cTwo.compareTo(cOne); 
    } 
    } 
} 
return 1; 

} 
+0

是的,重複的。這個問題接受的答案直接解決了這個問題。 –

回答

1

當產生一個未檢查的警告,因爲它不知道你的目標是要ComparableObject。事實上,它是非常不可能的,例如IntegerComparable<Integer>但這是獲得此代碼編譯

我建議你使用

@SuppressWarning("checked") 
Comparable<Object> cOne = (Comparable<Object>)oOne; 

Comparable cOne = (Comparable) oOne; 

順便說一句最簡單的方法,你不能只是return 1末爲你必須確保如果compare(a, b) > 0然後compare(b, a) < 0

+1

這不是導致問題的「Comparable」,而是「Comparable 」的演員陣容。請參閱上面的dup接受的答案。 –

+0

@ ErickG.Hagstrom好的一點,在這種情況下,警告是有效的,除非你認爲'a'和'b'將始終是'Comparable',可能會或可能不正確。 –