java泛型:递归类型的声明
在effevtivejava中,我看到一个声明: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
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(列表列表)
在我提供列表
甚至字符串
实现比较(字符串)
不比较(对象)时工作正常
这意味着您使用的是原始类型,而原始类型总是邪恶的。