Head First Java,第16章,编译器练习查询

Wes*_*324 0 java collections arraylist

我刚读完Head First Java的第16章,它是关于集合和泛型的使用.本章末尾有一个"Be be compiler"练习,提供了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>();
Run Code Online (Sandbox Code Playgroud)

解决方案声明第3行,第6行,第7行和第8行将编译但是当我尝试自己编译代码行时,我发现第4行也成功编译.更重要的是,第6行代码依赖于第4行代码编译,因为它引用了第4行的ArrayList!

我想知道是否有其他人做过这个"成为编译器"的练习在完成它时注意到这个问题,或者是否有人可以知道为什么作者会将第四行代码从解决方案中删除,即使它编译精细.

非常感谢您提供的任何帮助.

小智 5

第四行应编译.如果您查看Head First Java 的已确认勘误表,它就在那里:

在此输入图像描述