2017-01-31 37 views
0
ArrayList<ShipDetail> detailArray = new ArrayList<ShipDetail>(Arrays.asList(shipDetail)); 
Sorter.QuickSort(detailArray); 

而这是我在其中尝试执行一些算法的Sorter类。推理变量T具有不兼容的边界错误

public class Sorter 
{ 
    public static<T extends Comparable<T>> void QuickSort(AbstractList<T> collection) 
    { 
     quickSort(collection,0,collection.size()-1); 
    } 

} 

但是在编译时我收到以下错误:

要求:AbstractList的 发现:ArrayList的 原因:推论变量T有不兼容的界限 等式约束:ShipDetail 上限:可比 其中T是一个类型变量: T扩展Comparable在方法QuickSort(AbstractList)中声明

+2

是'ShipDetail'媲美本身?这是必需的(注'>') – mszymborski

+0

ü意味着,如果我有覆盖比较方法,如果是的话是 – Anny

+0

显示ShipDetail'的'类的声明。 – shmosel

回答

2

ShipDetail不可比较本身。这里所结合的:

<T extends Comparable<T>>

也适用于类型的参数,它被推断为ShipDetail可变T

class ShipDetail implements Comparable<ShipDetail> { ... 

而且不是:

ShipDetail应该被定义如下

class ShipDetail implements Comparator<ShipDetail> { ... 

Comparator s为它们提供的其他对象的比较的服务,同时Comparable s为对象的对象的算法,其本身允许将它们与其他类型的对象进行比较。

+0

现在感谢我了解使用Comparator和Comparable的区别。 – Anny

+0

@Anny爽!如果你认为它完全回答你的问题,你可以标记与绿色对勾答案。 – mszymborski

相关问题