泛型擦除(type erasure)和橋接方法(bridge method)

無界通配符會被編譯爲Object,有邊界的通配符會被編譯爲相應的邊界

 

正常類的繼承是不會產生這個橋接方法的。

橋接方法,一個類、接口繼承或實現某個類、接口時,會在子類中出現一個橋接方法。

這個方法不能被子類調用,即mn不能調用到這個橋接方法,但是n可以調用這個橋接方法,這個方法內部實現爲setData((Integer)data);,執行n.setData(“123”)時,其實就是執行的是MyNode中的橋接方法,執行String到Integer的強轉,就會發生ClassCastException。

從上看來,橋接方法實現了方法的重寫,即mn調用setData時調用的是MyNode的方法,而且不能調用Node類中的setData方法。

但是通過n來調用setData()時確是先調用橋接方法,然後橋接方法中調用setData((Integer)data)方法,這樣就發生類型轉換異常。但是非泛型的那種類,沒有橋接方法,會直接調用子類的覆寫方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章