Java泛型扩展了语法

时间:2014-11-20 07:46:44

标签: java generics

有人可以解释一下这个班级定义陈述

public class BinarTree<Type extends Comparable<Type>> {...

我完全理解它的目的,但不是语法。据我说它应该只是

public class BinarTree<Type extends Comparable> {...

的含义是什么
<Type extends Comparable<Type>> ?
                         ^^^^

3 个答案:

答案 0 :(得分:5)

Comparable是一个通用接口。这背后的原因是避免在Comparable#compareTo(...)方法中转换为特定类型。

因此,如果Type extends Comparable<Type>这意味着Type将导出带签名的方法

public int compareTo(Type t1)

而不是

public int compareTo(Object o1)

答案 1 :(得分:1)

界面Comparable本身就是一个模板。 那么你所拥有的是一个带有必须扩展模板的参数的模板。 特别是它必须扩展一个接收扩展类作为参数的模板。

Comparable是实现订单关系并实现方法int compareTo(TYPE o)的接口的模板。 所以定义一个类是正常的:

  class FooBar implements Comparable<FooBar> {...

二叉树不适用于声明的类:

  class FooBar implements Comparable<Snafu> {...

那是因为您可以将FooBarSnafu进行比较,但不能相互比较。

答案 2 :(得分:0)

public class BinarTree<Type extends Comparable>{...

Type可以是任意Comparable,也可以是Comparable<Integer>Comparable<OtherType>。如果这是你想要的,那很好。大多数情况下,我认为你知道你想要比较的是什么,所以专注于ComparableComparable<Type>