2016-09-20 64 views
0

我剛剛讀完Head First Java的第16章,這是關於集合和泛型的使用。在本章最後有一個「編譯器」練習,它提供了9行代碼,挑戰在於說哪一行代碼能夠成功編譯。是給定的代碼行,如下所示: -頭第一個Java,第16章,是編譯器練習查詢

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!

我想知道是否有其他人做過這樣的「編譯器」練習,在完成它時注意到了這個問題,或者如果任何人有任何想法,爲什麼作者會離開解決方案的第四行代碼即使它編譯好。

非常感謝您提供的任何幫助。

+1

第四行是完全正常的,如果這本書說,沒有編譯那麼這就是在書中錯誤。 – Jesper

+0

這正是我的想法,非常感謝您確認我的信仰。我只是想在接受它之前用更多的java程序員來確認它。 – Wes1324

回答

5

第4行應該編譯。如果你看一下Confirmed Errata爲團長第一個Java,它的存在:

enter image description here

+0

非常感謝Matthew。我不知道這個勘誤頁是否存在,它非常有用,並回答了我在Head First Java中進行的一些練習和聲明的其他一些查詢。 – Wes1324