java generic:递归类型的声明

时间:2016-09-05 09:33:40

标签: java generics

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)

2 个答案:

答案 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)