我刚读完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>();
解决方案指出第3行,第6行,第7行和第8行将编译,但是当我尝试自己编译代码行时,我发现第4行也成功编译。更重要的是,第6行代码依赖于第4行代码编译,因为它引用了第4行的ArrayList!
我想知道是否有其他人做过这个“做编译器”的练习在完成它时注意到了这个问题,或者是否有人可以知道为什么作者会将第四行代码从解决方案中删除虽然编译得很好。
非常感谢您提供的任何帮助。