我相信?
泛型中的类型是特定的未知类型。这意味着,声明该类型的列表将阻止我们向其中添加任何类型的对象。
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