關於Java擦除特性

來源:互聯網
上載者:User

標籤:

 1 package thinkingInJava; 2 /* 3  * 類比擦除 4  */ 5 public class SimpleHolder { 6      7     private Object obj ; 8     public void set(Object o ){ 9         obj = o ;10     }11     public Object get(){12         return obj ;13     }14     public static void main(String[] args) {15         // 如果該類使用了泛型參數,並且這個obj變數類型就是這個泛型參數表示的類型,那麼當構造這個類的對象的時候會自動擦除類型資訊,16         // 對於有非泛型上界的變數類型轉換成對應的非泛型上界,沒有指定的則轉換成Object17         SimpleHolder demo = new SimpleHolder() ;18         // 在運行時編譯器丟到了所有的類型資訊,所以set方法參數即使使用了泛型也不會起作用,19         // 而是將其轉換成器非泛型上界,但是在對象進入時(通過泛型設定值)會判斷這個對象與泛型的一致性20         demo.set("xxx") ;21         // 當然擷取時也是擷取的對應非泛型上界類型的值。但是編譯器會自動插入強制類型轉換的代碼22         String x = (String) demo.get() ;23     }24 }

 

package thinkingInJava;/* * 使用泛型版本 */public class GenericHolder<T> {private T obj ;public void set(T t ){this.obj = t ;}public T get(){return obj ;}public static void main(String[] args) {GenericHolder<String> demo = new GenericHolder<String>() ;//demo.set(new Object()); 雖然在運行時丟到了所有的類型資訊,但是編譯器仍然會保證傳遞進去的參數與泛型一致demo.set("hello ") ;String x = demo.get() ; // 出來時編譯器自動插入強制類型轉碼}}

  

關於Java擦除特性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.