List<String> list1 = new ArrayList<String>();
List<Integer> list2 = new ArrayList<Integer>();
System.out.println(list1.getClass());
System.out.println(list2.getClass());
System.out.println(list1.getClass() == list2.getClass());
输出结果:
class java.util.ArrayList
class java.util.ArrayList
true
泛型信息可以在运行时被擦除,泛型在编译期有效,在运行期被删除,也就是说所有泛型参数类型在编译后都会被清除掉。归根结底不管泛型被参数具体化成什么类型,其class都是RawType.class,比如List.class,而不是List.class或List.class
泛型的使用
泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法
public class Genericity<K,E,T> {
K k;
E e;
T t;
//泛型必须先声明才能使用
public <V> void genericityMethod1(V v){
System.out.println(v);
}
//如果使用了类中的泛型可以不声明
public void genericityMethod2(K k){
System.out.println(k);
}
//如果是静态方法即使使用了类中的泛型,依然要先声明
//因为类中的泛型在创建对象时才能确定,而静态方法不需要对象
public static <K> void genericityMethod3(K k){
System.out.println(k);
}
}