推理变量T具有不兼容的边界错误

时间:2017-01-31 01:54:13

标签: java arraylist generic-method

ArrayList<ShipDetail> detailArray = new ArrayList<ShipDetail>(Arrays.asList(shipDetail));
Sorter.QuickSort( detailArray );

这是我的Sorter类,我试图在其中实现一些算法。

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扩展方法QuickSort(AbstractList)

中声明的Comparable

1 个答案:

答案 0 :(得分:2)

ShipDetail与自身无法比较。绑定在这里:

<T extends Comparable<T>>

也适用于参数中的类型变量T,推断为ShipDetail

ShipDetail应定义如下:

class ShipDetail implements Comparable<ShipDetail> { ...

而不是:

class ShipDetail implements Comparator<ShipDetail> { ...

Comparator是提供其他对象比较服务的对象算法,而Comparable是自身允许将它们与其他类型的对象进行比较的对象。