我正在阅读有关scjp准备的书。我已经读过外卡中的extends
是包含运算符但是super
是独占的。但是我找不到相关的示例。我试着写一些代码。
List<? super Number> list1 = new ArrayList<Number>();
List<? extends Number> list2= new ArrayList<Number>();
这两个字符串编译良好。
我想我知道出了什么问题。或者这可能是书虫。
请帮助理解书中的内容?
答案 0 :(得分:2)
这是本书中的一个错误,超级和扩展运算符都包含在内 - 它们接受通配符中定义的类型。您可以在示例和以下示例中看到这一点
List<? super Number> list1;
list1 = new ArrayList<Number>(); // ok - inclusive
list1 = new ArrayList<Object>(); // ok - wildcard accepts the super classes
list1 = new ArrayList<Integer>(); // compilation error
List<? extends Number> list2;
list2 = new ArrayList<Number>(); // ok - inclusive
list2 = new ArrayList<Object>(); // compilation error
list2 = new ArrayList<Integer>(); // ok - wildcard accepts the subclasses