天天看點

ArrayList類的方法裡面傳回的是Object,為什麼它還能處理任何類?

看 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