2013-04-25 25 views
0
class UnfairContainer<T> implements Comparable<UnfairContainer> 
{  
    private ArrayList<T> array = new ArrayList<T>(); 

    public void sort() 
    { 
     Collections.sort(array); 
    } 

    public int compareTo(UnfairContainer o) 
    { 

    } 
} 

所以我有我的類實現可比較,但是當我嘗試創建調用Collections.sort()的排序方法,它給了我一個錯誤,說我不能調用收集排序與一個ArrayList。誰能幫忙?並幫助我與我的compareTo方法,我卡在我如何設想我的ArrayList中的每個元素使用Collection排序ArrayList

回答

1

問題是,列表不能保證是可排序的。這是因爲在您當前的設置下,T可能是任何東西 - 包括不執行Comparable的類,因此無法按Collections排序。的Collections.sort()類型簽名反映了這一點:

public static <T extends Comparable<? super T>> void sort(List<T> list); 

要解決這個問題,你需要把一個上限對T,以確保它是排序能夠:

class UnfairContainer<T extends Comparable<T> > 
     implements Comparable<UnfairContainer<T> > 
{ 

... 

T extends Comparable<T>意味着T必須是一個實現Comparable的類。這可以讓Collections知道ArrayList可以被排序,並且一切正常。

欲瞭解更多信息,請參閱java trail on bounded wildcards in generics