2010-01-14 56 views
6

我只是学习树和我不明白的一件事是类声明:这个类声明在Java中意味着什么?

例如:类BinarySearchTree<T extends Comparable<? super T>>

现在,您能否向我解释括号内是什么以及“<? super T>”?

你可以引荐我的任何好的来源?谢谢。

回答

15

声明一个类与单一的泛型类型参数。由于对于二叉搜索树,它必须能够比较两个项目,这需要指定,以便编译器可以验证它。

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

  • 无论T是,它应该扩展Comparable<T extends Comparable<...>>)。
  • Comparable应该能够比较自己T或超级T<? super T>)。

由于T通常可以是任何限制类型的选择,其中实现搜索树是有意义的。

0

Sun's Tutorial是开始学习通配符和仿制药的好地方。

Java Ranch对Java“Greenhorns”也非常好。

1

>括号用于所谓的泛型。这很像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的超类。

+0

这对用户有帮助 – gingergeek 2010-01-15 10:22:45

0

短语<? 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>()不会给出任何编译器错误。

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