我有一个类
public class OrderedBox<T> {}
编译器不允许创建这样的成员/局部变量。
OrderedBox<? extends T> testItems1 = new OrderedBox<? extends T>();
List<? extends T> testItems2 = new ArrayList<? extends T>();
可以理解,因为在运行时,它不能保证插入的对象类型(上限为T),这会违反类型安全性。
但它允许创建像这样的成员/局部变量。 为什么和如何允许这样做?
private List<OrderedBox<? extends T>> testItems = new ArrayList<OrderedBox<? extends T>>();
注意: 我在阅读http://www.onjava.com/pub/a/onjava/excerpt/javaian5_chap04/index1.html时遇到了这个问题。
可能的重复问题: 使用通配符创建新的泛型对象 泛型通配符实例化 但是这两个问题都提供了编译失败的原因。 我不明白为什么和如何允许最后一个选项。
<>
操作符来解决这个问题? - Makoto