我正在阅读 java 源代码,发现如下内容:
http://www.java2s.com/Code/JavaAPI/java.util/newTreeSetEComparatorsuperEc.htm
不明白为什么这个构造函数的参数是<? super E>
.
我的理解应该是<? extend E>
而不是 <? super E>
因为如果 E 是可比较的,则 E 的 child 必须是可比较的,而 E 的 parent 可能不是。
最佳答案
让我们考虑三个类:Drink
, Juice extends Drink
, 和 OrangeJuice extends Juice
.
如果我想要一个 TreeSet<Juice>
,我需要一个比较器来比较任何两种果汁。当然是Comparator<Juice>
会这样做。
A Comparator<Drink>
也会这样做,因为它能够比较任何两种饮料,从而比较任何两种果汁。
A Comparator<OrangeJuice>
不会这样做。如果我想添加 AppleJuice
对于我的果汁系列,它与此比较器不兼容,因为它只能比较橙汁。
关于java - 为什么 TreeSet<E> 的构造函数接受 E 的参数 super 而不是 E 的 extend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875376/