2010-01-14 88 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>()不會給出任何編譯器錯誤。

因此,通配符的使用最大化了該類的實用性。