(?) 通配符泛型类型的不规则性
我相信泛型中的类型是特定的未知类型。这意味着,声明该类型的列表将阻止我们向其中添加任何类型的对象。?
List<?> unknownList;
unknownList.add(new Object()); // This is an error.
编译器给出预期的错误。
但是当未知类型是第二级泛型时,编译器似乎并不在乎。
class First<T> {}
List<First<?>> firstUnknownList;
// All these three work fine for some reason.
firstUnknownList.add(new First<>());
firstUnknownList.add(new First<Integer>());
firstUnknownList.add(new First<String>());
我想编译器可能根本不关心第二级中的通用参数,但事实并非如此,
List<First<Integer>> firstIntegerList;
firstIntegerList.add(new First<String>()); // This gives a compiler error as expected.
那么,为什么编译器允许我们添加任何类型的元素,而在第二个示例中只有未知元素(因此什么都不可接受)呢?
注意:编译器 Java 1.8