浏览 2589 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-02-26
import java.util.*; public class GenericWriting { static <T> void writeExact(List<T> list, T item) { list.add(item); } static List<Apple> apples = new ArrayList<Apple>(); static List<Fruit> fruit = new ArrayList<Fruit>(); static void f1() { writeExact(apples, new Apple()); // writeExact(fruit, new Apple()); // Error: (出错行。。。。。。) // Incompatible types: found Fruit, required Apple } static <T> void writeWithWildcard(List<? super T> list, T item) { list.add(item); } static void f2() { writeWithWildcard(apples, new Apple()); writeWithWildcard(fruit, new Apple()); } public static void main(String[] args) { f1(); f2(); } } ///:~ 以上是书中源代码。作者认为出错行的理由是fruit是ArrayList<Fruit>(),里面不能放Fruit的任何子类对象,但是: 我在eclipse中把出错行..的那行取消注释,可以正常编译运行。请问是什么道理 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-02-26
如果文章的代码确实是你贴出来的那样,那确实是个错误。
你查一下该书的勘误,看看这个错误是否已经纠正了? 还有你查一下作者写这本书时使用的编译器是不是比较老了? |
|
返回顶楼 | |
发表时间:2008-02-26
List<? super T> list, list可以使用add方法的
List<? extends T> list, 则list不可以使用add方法,只能查询~ |
|
返回顶楼 | |
发表时间:2008-08-25
lz,我觉得你看书的时候应该仔细点,仔细看393行的倒数第二行
作者知道可以,但是这是违反静态类型安全的!你应该仔细琢磨作者的书哈!!! |
|
返回顶楼 | |
发表时间:2008-08-25
还有,不要动不动就说是个错误,免得误人子弟!
|
|
返回顶楼 | |