在 Effevtive Java 中,我看到一个声明:public static <T extends Comparable<T>> T max(List<T> list)
,类型变量T
是一种可以与自身进行比较的类型。我的问题是,当我从<T>
移除Comparable
时,区别是什么?我的意思是public static <T extends Comparable> T max(List<T> list)
。
答案 0 :(得分:3)
这意味着您将期望一种类似于Object
的类型,因为java在未提供时将通用类型推断为Object
。
<T extends Comparable> // The generic type for Comparable is inferred as Object as it was not provided.
这意味着提供给列表的类型需要实现compareTo(Object o)
并实现Comparable
(注意缺少的通用类型为Comparable
),我认为这不是预期的。< / p>
答案 1 :(得分:2)
您将声明参数化类型以在&#34; raw&#34;中实现Comparable
接口。办法。
例如,class Foo implements Comparable
(原始类型)适合您的参数化类型。
反过来,该类可以覆盖compareTo(Object o)
而不是compareTo(Foo f)
。