Item(不带任何类型参数)是原始类型,因此:
我们可以通过任何形式的
Item
到Item.compareTo
。例如,这将编译:new Item<String>().compareTo(new Item<Integer>())
该方法
o.getT()
返回Comparable
而不是T
,这将导致编译错误。
在第一点下的示例中,传递
Item<Integer>给后
Item.compareTo,我们会错误地传递
Integer到
String.compareTo。编译错误使我们无法编写执行此操作的代码。
我认为您只需要删除原始类型:
public class Item<T extends Comparable<T>>implements Comparable<Item<T>> { ... @Override public int compareTo(Item<T> o) { return getT().compareTo(o.getT()); }}


