15.7.4 邊界處的動作

下面的兩段代碼,經(jīng)過編譯器的編譯后,產(chǎn)生的字節(jié)碼是一樣的,你敢信?。。?/strong>

public class SimpleHolder {
    private Object obj;
    public void set(Object obj) {
        this.obj = obj;
    }

    public Object get() {
        return obj;
    }

    public static void main(String[] args) {
        SimpleHolder holder = new SimpleHolder();
        holder.set("Item");
        String s = (String) holder.get();
    }
}

↑↑↑
上面的代碼
在調(diào)用 set() 的時候,并不做類型檢查,而在調(diào)用 get() 的時候才做類型檢查。就是當(dāng)離開 get() 方法的時候做檢查。
↑↑↑


public class GenericHolder<T> {
    private T obj;
    public void set(T obj) {
        this.obj = obj;
    }

    public T get() {
        return obj;
    }

    public static void main(String[] args) {
        GenericHolder<String> holder = new GenericHolder<String>();
        holder.set("Item");
        String s = holder.get();
    }
}

上面的代碼
在調(diào)用 set() 的時候,并不做類型檢查,因為擦除了。同樣在調(diào)用 get() 的時候才做類型檢查。


原書中還有一段很重要的話。
記住,“邊界就是發(fā)生動作的地方”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 邊界處的動作 正因為泛型的擦除,泛型帶來了一個事實,可以表示沒有任何意義的事物,即可以表示沒有任何意義的事物。 盡...
    呆呆李宇杰閱讀 1,052評論 0 0
  • 編譯器無法確定泛型的實際類型,但可以保證在使用泛型時的一致性;
    烏魯木齊001號程序員閱讀 284評論 0 0
  • 未完,待更新 一、必備題 1、AFN 原理 鏈接:AFNetworking源碼——基本架構(gòu) - 簡書 2、SDWe...
    小熊_07cb閱讀 3,012評論 3 27
  • 面向?qū)ο蟮娜筇卣?并作簡單的介紹。 面向?qū)ο蟮娜齻€基本特征是:封裝、繼承、多態(tài)。 1.封裝是面向?qū)ο蟮奶卣髦?...
    xiny123閱讀 1,648評論 0 6
  • 1.項目經(jīng)驗 2.基礎(chǔ)問題 3.指南認(rèn)識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    扶光啟玄閱讀 5,205評論 0 13

友情鏈接更多精彩內(nèi)容