日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 泛型实现方法 — 擦拭法

發布時間:2023/12/3 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 泛型实现方法 — 擦拭法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂擦拭法是指,虛擬機對泛型其實一無所知,所有的工作都是編譯器做的。
例如,我們編寫了一個泛型類Pair,這是編譯器看到的代碼:

public class Pair<T> {private T first;private T last;public Pair(T first, T last) {this.first = first;this.last = last;}public T getFirst() {return first;}public T getLast() {return last;} }

而虛擬機根本不知道泛型。這是虛擬機執行的代碼:

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 泛型实现方法 — 擦拭法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。