1) 泛型(类型)的擦除:java的泛型只在编译时有效,运行时是不带有泛型信息的(class文件中不带有泛型信息)。
例如:写了一个测试程序,然后用反编译软件查看Class文件。
//java文件
package generacdemo;
import java.util.ArrayList;
import java.util.List;
public class Genertest {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();//带泛型
List<Integer> list1=new ArrayList<Integer>();//带泛型
list.add("java");
list1.add(300);
//获取泛型对象的Class对象
String a=list.getClass().getName();
String b=list1.getClass().getName();
System.out.println(a+"\t"+b);
}
}
//class文件
通过对比可以得知,在编译成class文件时,是不带有泛型信息的。
添加泛型类型的类的Class对象是否为同一个,通过输出2个泛型对象的Class对象,输出如下:
java.util.ArrayList java.util.ArrayList
可以看出2个泛型对象的Class对象为同一个,也就是说运行时是没有泛型的。
2)泛型子类
List<Object> list1;
List<String> list2;
list1=list2;//编译错误
list1与list2是2个不同的泛型类,编译时不会通过的。
3)反射获得泛型
参考资料:http://www.blogjava.net/fancydeepin/archive/2012/08/25/386241.html