一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。 如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。 ArrayList collection1=new ArrayList(); ArrayList<String> collection2=new ArrayLIst(); 这就是java泛型的核心概念:告诉编译器想使用什么类型,然后译器帮你处理一切细节。 ==================================================================== Arr1和arr2 编译完以后 ,编译器编译带类型说明的集合时会去掉 “类型”信息,使程序运行效率不受影响,对于参数化的泛型类型, getClass()方法的返回值和原始类型完全一样。 ArrayList<Integer> arr1=new ArrayList<Integer>(); ArrayList<String> arr2=new ArrayList<String>(); System.out.println(arr1.getClass()==arr2.getClass()); true ==================================================================== 泛型是给编译器看的,我也可以穿过编译器。(例如:) ArrayList<Integer> arr=new ArrayList<Integer>(); arr.getClass().getMethod("add", Object.class).invoke(arr, "123"); System.out.println(arr.get(0)); 123 ====================================================================
|