我上课了
public class OrderedBox<T> {}
Run Code Online (Sandbox Code Playgroud)
编译器不允许像这样创建成员/局部变量.
OrderedBox<? extends T> testItems1 = new OrderedBox<? extends T>();
List<? extends T> testItems2 = new ArrayList<? extends T>();
Run Code Online (Sandbox Code Playgroud)
它在运行时是可以理解的原因,它不能保证对象的类型(由T限制的上限)将被插入并且将违反类型安全.
但它允许创建像这样的成员/局部变量.为什么以及如何允许这个?
private List<OrderedBox<? extends T>> testItems = new ArrayList<OrderedBox<? extends T>>();
Run Code Online (Sandbox Code Playgroud)
注意:我在浏览http://www.onjava.com/pub/a/onjava/excerpt/javaian5_chap04/index1.html时有这个疑问
可能重复:
使用通配符
Generics通配符实例创建新的通用对象
但是这两个问题都提供了两个选项编译失败的原因.我无法理解为什么以及如何允许最后一个.