java generic:递归类型的声明

Effevtive Java中我看到一个声明: public static <T extends Comparable> T max(List list) ,类型变量T是一个可以与自身进行比较的类型。 我的问题是当我从Comparable删除时有什么区别? 我的意思是这个public static T max(List list)

这意味着您将期望一个类似于Object的类型,因为java在未提供时将generics类型推断为Object

  // The generic type for Comparable is inferred as Object as it was not provided. 

这意味着提供给列表的类型需要实现compareTo(Object o)并实现Comparable (注意缺少的generics类型为Comparable ),我认为这不是预期的。

您将声明参数化类型以“原始”方式实现Comparable接口。

例如, class Foo implements Comparable (原始类型)将适合您的参数化类型。

反过来,该类可以覆盖compareTo(Object o)而不是compareTo(Foo f)