【发布时间】:2016-09-20 21:04:25
【问题描述】:
我刚刚读完 Head First Java 的第 16 章,内容是关于集合和泛型的使用。本章末尾有一个“成为编译器”练习,给出了 9 行代码,挑战在于说明哪些代码行将成功编译。给出的代码行如下:-
ArrayList<Dog> dogs1 = new ArrayList<Animal>();
ArrayList<Animal> animals1 = new ArrayList<Dog>();
List<Animal> list = new ArrayList<Animal>();
ArrayList<Dog> dogs = new ArrayList<Dog>(); //The book says this line will not compile
ArrayList<Animal> animals = dogs;
List<Dog> dogList = dogs;
ArrayList<Object> objects = new ArrayList<Object>();
List<Object> ObjList = objects;
ArrayList<Object> objs = new ArrayList<Dog>();
解决方案指出第 3、6、7 和 8 行将编译,但是当我尝试自己编译代码行时,我发现第 4 行也编译成功。更重要的是,第 6 行代码依赖于第 4 行代码编译,因为它引用了第 4 行的 ArrayList!
我想知道是否有其他人在完成这个“成为编译器”练习时注意到了这个问题,或者是否有人知道为什么作者甚至会将第四行代码排除在解决方案之外虽然它编译得很好。
非常感谢您提供的任何帮助。
【问题讨论】:
-
第 4 行完全没问题,如果书上说不能编译,那就是书上的错误。
-
这正是我的想法,非常感谢您确认我的信念。我只是想在接受它作为事实之前与更多的 java 程序员确认它。
标签: java arraylist collections