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類型的集合中,通過反射可以證明泛型在運行期間是進行擦出的。