Java 泛型实现方法 — 擦拭法
生活随笔
收集整理的這篇文章主要介紹了
Java 泛型实现方法 — 擦拭法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所謂擦拭法是指,虛擬機對泛型其實一無所知,所有的工作都是編譯器做的。
例如,我們編寫了一個泛型類Pair,這是編譯器看到的代碼:
而虛擬機根本不知道泛型。這是虛擬機執行的代碼:
public class Pair {private Object first;private Object last;public Pair(Object first, Object last) {this.first = first;this.last = last;}public Object getFirst() {return first;}public Object getLast() {return last;} }因此,Java使用擦拭法實現泛型,導致了:
- 編譯器把類型視為Object;
- 編譯器根據實現安全的強制轉型。
使用泛型的時候,我們編寫的代碼也是編譯器看到的代碼:
Pair<String> p = new Pair<>("Hello", "world"); String first = p.getFirst(); String last = p.getLast();而虛擬機執行的代碼并沒有泛型:
Pair p = new Pair("Hello", "world"); String first = (String) p.getFirst(); String last = (String) p.getLast();所以,Java的泛型是由編譯器在編譯時實行的,編譯器內部永遠把所有類型T視為Object處理,但是,在需要轉型的時候,編譯器會根據T的類型自動為我們實行安全地強制轉型。
總結
以上是生活随笔為你收集整理的Java 泛型实现方法 — 擦拭法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 实现 js css html分离
- 下一篇: 安卓DDOS攻击器(安卓ddos攻击器a