1. 程式人生 > >泛型擦除(type erasure)和橋接方法(bridge method)

泛型擦除(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)方法,這樣就發生型別轉換異常。但是非泛型的那種類,沒有橋接方法,會直接呼叫子類的覆寫方法。