我有一个相当简单的问题。我无法通过搜索找到答案。
这两个代码片段有区别吗?有什么区别?
片段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) {
...
}
...
}
片段2:
public class BinaryTree<T extends Comparable<? super T>> {
...
public void add(T value) {
...
}
public void add(T value, Node node) {
...
}
...
}
Fragment1 明确指定参数值必须是T类型或T类型的子类型。
Fragment2 指定参数值必须是T类型。但是根据我的知识和经验,我认为我也可以在这里提供T的子类型。与fragment1相同。
我查看了这两个片段的反汇编字节码。确实有区别:
< public <E extends T> void add(E);
---
> public void add(T);
那只是反映了源代码...
我只是不明白意思。而且我也找不到显示差异的示例应用程序。
感谢您的评论。