Java范型深入理解,利用反射穿透编译器忽略范型
2012-02-06 13:09
288 查看
Java中的范型的作用阶段是在 编译时,也就是说范型是给编译器看的 。
我们经常看到 类 ArrayList<E> 后面的<E> 就是类型化参数,说明这个 ArrayList支持 范型化 。
比如 ArrayList<Integer> 就叫做Integer类型化的ArrayList.,当编译完之后 在运行阶段 就会丢掉 类型化参数 。
范型化后的 类型 与原始类型之间的操作:
Collection c=new Vector<Integer>() ; 可以
Collection<Integer> c=new Vector() ; //也可以
Vector<Integer> ccc=new Vector<Object>(); //错误 因为 前后类型不匹配 Object'课代表任意类型
Vector<Integer>[] cccc=new Vector<Object>[10](); //数组不能进行范型化 ,因为每个Vector本身就像当一个数组 每个数组都有自己的类型
Vector v=new Vector<String>() ;
Vector<Object> v1=v ; //虽说前后类型不匹配但是也可以 因为编译器进行语法检查是一行行的往下走的 走到第二部的时候 v 就是原始没有 范型化的Vector对象
利用反射穿透编译器 忽略范型:
ArrayList<Integer> col1=new ArrayList() ;
col1.getClass().getMethod("add",Object.class).invoke(col1, "reflect") ; //这个运行时候才会调用 于是就跳过了编译器
System.out.println(col1.get(0));
我们经常看到 类 ArrayList<E> 后面的<E> 就是类型化参数,说明这个 ArrayList支持 范型化 。
比如 ArrayList<Integer> 就叫做Integer类型化的ArrayList.,当编译完之后 在运行阶段 就会丢掉 类型化参数 。
范型化后的 类型 与原始类型之间的操作:
Collection c=new Vector<Integer>() ; 可以
Collection<Integer> c=new Vector() ; //也可以
Vector<Integer> ccc=new Vector<Object>(); //错误 因为 前后类型不匹配 Object'课代表任意类型
Vector<Integer>[] cccc=new Vector<Object>[10](); //数组不能进行范型化 ,因为每个Vector本身就像当一个数组 每个数组都有自己的类型
Vector v=new Vector<String>() ;
Vector<Object> v1=v ; //虽说前后类型不匹配但是也可以 因为编译器进行语法检查是一行行的往下走的 走到第二部的时候 v 就是原始没有 范型化的Vector对象
利用反射穿透编译器 忽略范型:
ArrayList<Integer> col1=new ArrayList() ;
col1.getClass().getMethod("add",Object.class).invoke(col1, "reflect") ; //这个运行时候才会调用 于是就跳过了编译器
System.out.println(col1.get(0));
相关文章推荐
- Java范型深入理解,利用反射穿透编译器忽略范型
- Java范型深入理解,利用反射穿透编译器忽略范型
- 深入理解Java:类加载机制及反射
- 深入理解Java类型信息(Class对象)与反射机制
- 深入理解 Java 反射:Field (成员变量)
- 深入理解Java反射:候捷谈Java反射机制
- 深入理解java反射
- 深入理解 Java 反射:Method (成员方法)
- JAVA NIO 新IO 分析 理解 深入 实例,如何利用JAVA NIO提升IO性能
- 深入理解java---反射篇
- 深入理解Java:类加载机制及反射
- 深入理解 Java 反射:Class (反射的入口)
- 深入理解Java:类加载机制及反射
- 深入理解Java反射:候捷谈Java反射机制
- 深入理解Java:类加载机制及反射
- 深入理解Java:类加载机制及反射
- 从”JAVA“而终 20:深入理解Java的内省与反射
- 深入理解Java反射
- 深入理解Java反射