超级和扩展通用通配符独占?

时间:2014-06-14 13:50:44

标签: java generics wildcard

我正在阅读有关scjp准备的书。我已经读过外卡中的extends是包含运算符但是super是独占的。但是我找不到相关的示例。我试着写一些代码。

    List<? super Number> list1 = new ArrayList<Number>();
    List<? extends Number> list2= new ArrayList<Number>();

这两个字符串编译良好。

我想我知道出了什么问题。或者这可能是书虫。

请帮助理解书中的内容?

1 个答案:

答案 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