看 HeadFirst Java 一書中,ArrayList 類的源碼部分,發現他的很多方法的傳回值是E,
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
但是你把他指派給的肯定是你自己寫的類,
ArrayList<Animal> wolflist = new ArrayList<Animal>();
Wolf wolf =new Wolf();
wolf.setZhangxiang("zxwolf1");
wolflist.add(wolf);
Animal animal = wolflist.get();
那麼問題來了,很明顯他沒有做向下轉型,也無法做,那麼為什麼還能處理任何類?
看到接口與多态章節最後,才看到他的解釋:這個泛型對編譯器來說是個禁止将 Animal 類型以外的對象裝進 ArrayList 的标記,是以編譯器會幫你做類型轉換!編譯器也很清楚将從此 ArrayList 中取出的對象轉成 Animal 類型是絕對安全的。可見編譯器就像你的男朋友一樣,會幫你做很多事2333333333