我只是學習樹和我不明白的一件事是類聲明:這個類聲明在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