java泛型:递归类型的声明

java泛型:递归类型的声明,java,generics,Java,Generics,在effevtivejava中,我看到一个声明:publicstatictmax(List),类型变量T是一个可以与自身进行比较的类型。我的问题是,当我将从Comparable中删除时,有什么区别?我的意思是这个公共静态T max(列表) 这意味着您将期望一个与对象相当的类型,因为java在未提供时推断泛型类型为对象 <T extends Comparable> // The generic type for Comparable is inferred as Object as i

在effevtivejava中,我看到一个声明:
publicstatictmax(List)
,类型变量
T
是一个可以与自身进行比较的类型。我的问题是,当我将
Comparable
中删除时,有什么区别?我的意思是这个
公共静态T max(列表)

这意味着您将期望一个与
对象
相当的类型,因为java在未提供时推断泛型类型为
对象

<T extends Comparable> // The generic type for Comparable is inferred as Object as it was not provided.
//Comparable的泛型类型被推断为Object,因为它未提供。

这意味着提供给列表的类型将需要实现
compareTo(对象o)
和实现
Comparable
(注意
Comparable
缺少泛型类型),我认为这不是有意的。

“原始”方式

例如,
类Foo实现可比较的
(原始类型)将适合您的参数化类型


反过来,该类可以重写
compareTo(对象o)
而不是
compareTo(Foo f)

,然后我为
max
方法指定一个字符串列表,但是
String
实现
compareTo(另一个字符串)
而不是
compareTo(对象o)
@user2018791提供
列表将在您使用
时起作用
字符串将作为
实现
可比性
但是
静态T max(列表列表)
在我提供
列表
甚至
字符串
实现
比较(字符串)
比较(对象)时工作正常
这意味着您使用的是原始类型,而原始类型总是邪恶的。