我有一個相當簡單的問題。通過搜索我找不到答案。泛型類型的參數化方法
這兩個代碼片段有區別嗎?有什麼區別?
片段1:
public class BinaryTree<T extends Comparable<? super T>> {
...
public <E extends T> void add(E value) {
...
}
public <E extends T> void add(E value, Node node) {
...
}
...
}
Fragment2:
public class BinaryTree<T extends Comparable<? super T>> {
...
public void add(T value) {
...
}
public void add(T value, Node node) {
...
}
...
}
片段1指定明確的是,參數值必須是類型T或類型T的亞型。
Fragment2指定,該參數值必須類型T的。但從我的知識和經驗來看,我認爲我也可以在這裏提供T的子類型。和fragment1一樣。
我看了這兩個片段的反彙編字節代碼。的確是有區別的:
< public <E extends T> void add(E);
---
> public void add(T);
這只是反映了源代碼
我只是不明白的意思。而且我也找不到示例應用程序,它顯示了差異。
感謝您的意見。
這些碎片來自哪裏?這是作業/課程作業嗎? – Bobulous
這些碎片形成一本書。作者聲稱通過從fragment2移動到fragment1來改進該類。我無法重建他的解釋。 – Bridy