java泛型擦除


java 泛型是JDK5引入的新特性,在編譯期檢查代碼類型的正確性。泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。

java泛型是一個偽泛型,因為在代碼運行期間,泛型會被擦除。

例如代碼:

List<Long> idList = new ArrayList<>();
 idList.add(1L);
//添加String 類型的值時在編譯期間就報錯
 idList.add("張三");

編譯器會在代碼編譯期間檢測代碼參數類型的正確性。

泛型擦除的體現: list1.getClass() == list2.getClass()  返回true

List<Integer> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
System.out.println(list1.getClass() == list2.getClass());

還可以通過反射添加進去不同泛型類型的數據 如:

Method method = idList.getClass().getDeclaredMethod("add",Object.class);
method.invoke(idList,"張三");
System.out.println(idList.toString());

這樣將String類型的數據保存進Long類型的集合中,通過反射可以證明泛型在運行期間是進行擦出的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM