我有一个相当简单的问题。通过搜索我找不到答案。泛型类型的参数化方法
这两个代码片段有区别吗?有什么区别?
片段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