这个类声明在Java中意味着什么?

我只是学习树和一件我不明白的事情是类声明:

例如:class BinarySearchTree<T extends Comparable> BinarySearchTree<T extends Comparable>

现在,请您解释一下括号中的内容和“ ”?

你能引用我的任何好消息来源吗? 谢谢。

这声明了一个具有单个generics类型参数的类。 因为对于二叉搜索树,它必须比较两个项,这需要指定,以便编译器可以validation它。

尖括号中的部分是类型参数T和它的约束,它表示:

  • 无论T是什么,它都应该扩展Comparable> )。
  • 所述Comparable应该能够将自己与T或超类T )进行比较。

由于T通常可以是任何东西,因此限制了对实现搜索树有意义的类型的选择。

意味着?T的父母。 如果? 已知(例如X ),您可以使用

编辑 :这是Java Generic的良好来源: http : //java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

<>括号用于所谓的泛型。 这很像C ++中的模板,并且您可以创建一个可以强类型化的单个数据结构。 例如,ArrayList对象使用泛型来定义ArrayList中的项目类型:

 ArrayList - an ArrayList containing Strings ArrayList - an ArrayList containing MyClass objects 

当您定义使用generics的结构时,您可以使用上面的表示法。 “T”是某个类的占位符,在实例化类并给出类型时填充该类。 例如,ArrayList的定义可能如下所示:

 public class ArrayList ... 

最简单的方法是简单地使用MyGeneric并让任何类使用。 但是,有时您只希望gereric与某个inheritance结构中的类一起使用。 在这个特定情况下Comparable Comparable意味着这将是一个扩展Comparable的对象Compares匹配T的任何类型的对象或者是T的超类。

Sun的教程是开始学习通配符和generics的好地方。

Java Ranch也非常适合Java“Greenhorns”。

短语 是一个通配符,暗示BinarySearchTree类可以采用:
一个。 一个扩展Comparable的类型参数(T)
并且还可以采用父类扩展Comparable的子类型(S)

构造 将类BinarySearchTree的实用程序扩展为实现Comparable及其子类型的类型。

下面的代码片段演示了这一点:

 // Below declaration of Helper class doesn't uses the wildcard super class Helper> { // some helper methods } abstract class Animal implements Comparable { public int compareTo(final Animal o) { // implementation ... } // other abstract methods } class Mammal extends Animal { // implement abstract methods } 

使用上面的声明,语句Helper x = new Helper()工作正常。
但声明: Helper x = new Helper()给出了编译错误
类型参数Mammal不在其范围内
(编译器版本是javac 1.5.0_06)

当类Helper的声明更改为以下forms时:

 class Helper> { // some helper methods } 

然后语句Helper x = new Helper()不会给出任何编译器错误。

因此,使用通配符可以最大化该类的实用性。