我只是学习树和我不明白的一件事是类声明:这个类声明在Java中意味着什么?
例如:类BinarySearchTree<T extends Comparable<? super T>>
。
现在,您能否向我解释括号内是什么以及“<? super T>
”?
你可以引荐我的任何好的来源?谢谢。
我只是学习树和我不明白的一件事是类声明:这个类声明在Java中意味着什么?
例如:类BinarySearchTree<T extends Comparable<? super T>>
。
现在,您能否向我解释括号内是什么以及“<? super T>
”?
你可以引荐我的任何好的来源?谢谢。
声明一个类与单一的泛型类型参数。由于对于二叉搜索树,它必须能够比较两个项目,这需要指定,以便编译器可以验证它。
的部分在尖括号是类型参数T
和用于它的约束,其表示:
T
是,它应该扩展Comparable
(<T extends Comparable<...>>
)。Comparable
应该能够比较自己T
或超级T
(<? super T>
)。由于T
通常可以是任何限制类型的选择,其中实现搜索树是有意义的。
<? super T>
表示?
是T
的母公司。如果?
是已知的(例如X
),你可以使用<T extends X>
编辑:这是Java泛型良好来源:http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Sun's Tutorial是开始学习通配符和仿制药的好地方。
Java Ranch对Java“Greenhorns”也非常好。
>括号用于所谓的泛型。这很像C++中的模板,并允许您创建可以强类型化的单个数据结构。例如,ArrayList对象使用一个通用的定义是什么类型的项目是在ArrayList中:
ArrayList<String> - an ArrayList containing Strings
ArrayList<MyClass> - an ArrayList containing MyClass objects
当你定义的结构,使得使用您使用音符上面仿制药。 “T”是某个类的占位符,当类被实例化并赋予类型时,该类将被填充。例如,ArrayList中的定义可能是这个样子:
public class ArrayList<T> ...
最简单的方法就是使用MyGeneric<T>
并让使用任何类。然而,有时候你只希望gereric和某些继承结构中的类一起使用。在这个特定情况下,Comparable<? super T>
意味着这将是一个扩展Comparable Comparable与T相匹配的任何类型对象的对象,或者是T的超类。
短语<? super T>
是一个通配符,并暗示,类 BinarySearchTree可以采取:
一个。延伸可比较的类型参数(T)
b。并且还可以采取实现可比及其亚型的子类型(S)的父延伸可比
该构建<? super T>
延伸类BinarySearchTree到 类型的效用。
下面的代码片段说明了这一点:
// Below declaration of Helper class doesn't uses the wildcard super
class Helper<T extends Comparable<T>> {
// some helper methods
}
abstract class Animal implements Comparable<Animal> {
public int compareTo(final Animal o) {
// implementation ...
}
// other abstract methods
}
class Mammal extends Animal {
// implement abstract methods
}
随着上述声明Helper<Animal> x = new Helper<Animal>()
工作正常的声明。
但声明:Helper<Mammal> x = new Helper<Mammal>()
给人的编译错误
类型参数的哺乳动物是不是它的绑定
内(编译器版本的javac 1.5.0_06)
当助手类的声明更改为以下形式:
class Helper<T extends Comparable<? super T>> {
// some helper methods
}
然后语句
Helper<Mammal> x = new Helper<Mammal>()
不会给出任何编译器错误。
因此,通配符的使用最大化了该类的实用性。
这对用户有帮助 – gingergeek 2010-01-15 10:22:45