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)
。