这个类声明在Java中意味着什么?
我只是学习树和一件我不明白的事情是类声明:
例如:class BinarySearchTree<T extends Comparable>
BinarySearchTree<T extends Comparable>
。
现在,请您解释一下括号中的内容和“ ”?
你能引用我的任何好消息来源吗? 谢谢。
这声明了一个具有单个generics类型参数的类。 因为对于二叉搜索树,它必须比较两个项,这需要指定,以便编译器可以validation它。
尖括号中的部分是类型参数T
和它的约束,它表示:
- 无论
T
是什么,它都应该扩展Comparable
(
)。> - 所述
Comparable
应该能够将自己与T
或超类T
(super T>
)进行比较。
由于T
通常可以是任何东西,因此限制了对实现搜索树有意义的类型的选择。
super T>
super 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 super T>
Comparable super T>
意味着这将是一个扩展Comparable的对象Compares匹配T的任何类型的对象或者是T的超类。
Sun的教程是开始学习通配符和generics的好地方。
Java Ranch也非常适合Java“Greenhorns”。
短语 super T>
super T>
是一个通配符,暗示BinarySearchTree类可以采用:
一个。 一个扩展Comparable的类型参数(T)
湾 并且还可以采用父类扩展Comparable的子类型(S)
构造 super T>
super T>
将类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
工作正常。
但声明: Helper
给出了编译错误
类型参数Mammal不在其范围内
(编译器版本是javac 1.5.0_06)
当类Helper的声明更改为以下forms时:
class Helper> { // some helper methods }
然后语句Helper
不会给出任何编译器错误。
因此,使用通配符可以最大化该类的实用性。