java中利用反射机制绕开编译器对泛型的类型限制
2014-05-03 14:22
225 查看
首先看下面这个例子
这说明编译器编译带参数说明的集合时会去掉类型的信息,转化为普通的链表,所以运行时,将不会受到泛型的影响。所以可以这样来绕开泛型的限制:
public static void main(String[] args) throws Exception {
//定义一个包含int的链表
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
//获取链表的add方法,注意这里是Object.class,如果写int.class会抛出NoSuchMethodException异常
Method m = al.getClass().getMethod("add", Object.class);
//调用反射中的add方法加入一个string类型的元素,因为add方法的实际参数是Object
m.invoke(al, "hello");
System.out.println(al.get(2));
}
public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.println(al1.getClass()==al2.getClass()); }
这说明编译器编译带参数说明的集合时会去掉类型的信息,转化为普通的链表,所以运行时,将不会受到泛型的影响。所以可以这样来绕开泛型的限制:
public static void main(String[] args) throws Exception {
//定义一个包含int的链表
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
//获取链表的add方法,注意这里是Object.class,如果写int.class会抛出NoSuchMethodException异常
Method m = al.getClass().getMethod("add", Object.class);
//调用反射中的add方法加入一个string类型的元素,因为add方法的实际参数是Object
m.invoke(al, "hello");
System.out.println(al.get(2));
}
相关文章推荐
- java 反射机制(通过getGenericSuperclass()方法获取到父类泛型的类型)
- 黑马程序员--Java基础加强--12.利用反射操作泛型I【与反射+泛型相关的接口类型综述】【Type】【ParameterizedType】【个人总结】
- java 反射机制 (获取父类泛型的类型)getGenericSuperclass
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- 利用gson处理Java反射TypeToken泛型运行时类型擦除
- 黑马程序员--Java基础加强--17.利用反射操作泛型VI【泛型类型变量的语义】【GenericDeclaration接口】【泛型接口TypeVariable】【通过Class反射解析泛型类】
- Java 中利用泛型和反射机制抽象DAO的实例
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- java 反射机制 (获取父类泛型的类型)getGenericSuperclass
- Java中,利用反射机制修改定义出来的String对象本身。
- 利用Java的反射与代理机制实现IOC
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- 2、利用反射技术得到泛型类型,实现对实体添删改查操作进行代码重用设计
- java 学习笔记--利用反射实现泛型数组的复制
- java再复习——通过反射获取到方法的参数和返回值的泛型类型
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- 利用Java反射、泛型和apache/poi编写可通用的导出Excel代码
- (三)JAVA利用反射机制将XML中的内容放入实体对象中
- 利用java反射获取泛型类的类型参数具体类对象
- 利用java的反射以及在java web反射机制的使用优化程序