使用反射繞過泛型,直接賦值

2021-06-10 04:40:18 字數 549 閱讀 1424

基本的泛型:

public class genericstest }

輸出結果很明顯是abc和3

現在用放射看看他們的位元組碼是不是同乙份:

在程式中加入下面**:

system.out.println(collection1.getclass()==collection2.getclass());

這行**的輸出結果是true------說明arraylist雖然有不同的泛型在記憶體中位元組碼只有乙份,就是編譯完成之後就沒有型別資訊了,已經去型別化了,為了證明這個可以行,用反射向arraylistcollection2 = new arraylist();中增加string型別的物件。

首先若是直接collection2.add("abc");編譯器肯定是會報錯的。因為collection2是integer型別的。

下面用反射進行實驗:

輸出結果為:

abc 3

true

abc

泛型反射技巧

1 如何獲得乙個封閉構造型別 closed constructed type 的type物件?假設有如下的型別 class testtype t class testtype t,u 如果要獲得封閉構造型別的type物件,那麼只需要用c 的typeof運算子,或者vb的gettype運算子作用於具體...

泛型和反射

泛型允許程式設計師在 中將變數或引數的型別,先用 型別佔位符 來代替,等到允許的時候再根據傳入的 類 來代替 泛型是指帶型別引數的類,而不是引數本身。類 方法 結構 介面都可定義為泛型 可以定義多個引數 public class person 例項化乙個引用引數型別的泛型,它的記憶體分配的大小是一樣...

泛型與反射

泛型 泛型的作用 泛型是jdk1.5以後才有的,可以在編譯時期進行型別檢查,且可以避免頻繁型別轉化!泛型的使用 泛型的方法 public class genericdemo 測試方法 test public void testmethod throws exception 泛型的類 public c...