小编arc*_*arc的帖子

使用通配符实例化通用对象

我上课了

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通配符实例创建新的通用对象

但是这两个问题都提供了两个选项编译失败的原因.我无法理解为什么以及如何允许最后一个.

java generics bounded-wildcard

3
推荐指数
1
解决办法
252
查看次数

标签 统计

bounded-wildcard ×1

generics ×1

java ×1