2013-04-25 77 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