class BinarySearch<T extends Comparable<? super T> >
为什么T extends Comparable <? super T>
包括T
,意味着包括Comparable<T>
而不仅仅是超类层次结构?我对super关键字感到困惑,因为我认为super只包含超类项。我是java的新手,在Java书中有以下例子:
这是关于一个类中的方法,该方法试图使用Java.awt.Component限制层次结构的上限和下限,因此该类扩展了Container
class CustomComponent<T extends Container>
在课堂上他们有以下方法
void describeComponent<CustomComponent<? super JPasswordField> ref)
然后继续说
请注意,JPasswordField是JTextField的超类,它本身在允许的对象列表中被省略。
答案 0 :(得分:7)
来自Lower Bounded Wildcards, The Java Tutorial 的Generics部分的一部分:
... 下限通配符将未知类型限制为该类型的特定类型或超类型。
(大胆的,强调他们的)
因此,匹配T extends Comparable<T>
的类集是与T extends Comparable<? super T>
匹配的类集的子集。通配符? super T
本身与T
以及T
的任何超类匹配。
换句话说,“super
仅包含超类项目”的假设完全不正确。
您在示例中的混淆也可能源于JTextField
是JPasswordField
的超类这一事实;换句话说,JPasswordField extends JTextField
。该示例将匹配以下任何类:
这个例子会更有意义,如下所示:
void describeComponent(CustomComponent<? super JTextField> ref) {...}
请注意,JPasswordField是JTextField的子类,它本身就是 在允许的对象列表中省略,因为它不是 JTextField的超类。
答案 1 :(得分:3)
我相信“&lt; T延伸Comparable&lt;?super T&gt;&gt;”的语义含义 是T还是T的超类必须实现Comparable