本帖最后由 冯越 于 2012-5-17 15:40 编辑
最近在学习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;为什么不报错呢? |