首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于Java 泛型 ?extends T的有关问题,搞不清楚

2012-08-01 
关于Java 泛型 ?extends T的问题,搞不清楚在学习java泛型时 ,看到了泛型的一个例子ListApple apples n

关于Java 泛型 ?extends T的问题,搞不清楚
在学习java泛型时 ,看到了泛型的一个例子

List<Apple> apples = new ArrayList<Apple>();
List<? extends Fruit> fruits = apples;
fruits.add(new Strawberry());

其中,Fruit是父类、Apple和Strawberry是子类,add操作执行错误,给出的解释是

“这个? extends T 通配符告诉编译器我们在处理一个类型T的子类型,但我们不知道这个子类型究竟是什么。因为没法确定,为了保证类型安全,我们就不允许往里面加入任何这种类型的数据。”

我不明白编译器怎么会不知道这个子类型是什么呢?如果不知道的话,语句List<? extends Fruit> fruits = apples;为什么不报错呢?



[解决办法]

探讨
3ks lxbccsu、dracularking、n5233873,我是不是能这么理解:

List<Apple> apples = new ArrayList<Apple>();
List<? extends Fruit> fruits = apples;
这两句确定了fruits这个list此时只能存储Apple了,不可以再存储其他子类了

热点排行