黑马程序员_java中泛型(通配符)与反射技术
2013-01-18 16:31
267 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
实验目的:
泛型是提供给javac编译用的,编译完了就去掉泛型
al1.getClass()==al2.getClass()证明了编译完去掉泛型
泛型通配符,上,下限定边界
限定通配符的上边界:
Vector<? extends Number> x=new Vector<Integer>();//正确
Vector<? extends Number> x=new Vector<String>();//错误
限定通配符的下边界:
Vector<? super Integer> x=new Vector<Integer>();//正确
Vector<? super Integer> x=new Vector<String>();//错误
代码部分如下
/*没有使用泛型将会警告,还要强制类型转换
* ArrayList al=new ArrayList<E>();
al.add(1);
al.add(1L);
al.add("abc");
int i=(Integer) al.get(1);
*/
//反射中使用泛型,省了类型转换
Constructor<String> constructor=String.class.getConstructor(StringBuffer.class);
String str=constructor.newInstance(new StringBuffer("abc"));
System.out.println(str.charAt(2));
ArrayList<String> al1=new ArrayList<String>();
ArrayList<Integer> al2=new ArrayList<Integer>();
System.out.println(al1.getClass()==al2.getClass());//如果为true证明是同一份字节码
//al2.add("abc");
//al2为一个Integer类型的ArrayList集合,用反射方法穿透泛型向al2中加入一个字符串
al2.getClass().getMethod("add", Object.class).invoke(al2, "abc");
System.out.println(al2.get(0));
//泛型中的类型不考虑继承关系
//Vector<Object> v=new Vector<String>();//错误的,不写<>没错,写了是明知故犯前后不匹配
实验证明了泛型是告诉编译器用的,且提高了使用安全性。
实验目的:
泛型是提供给javac编译用的,编译完了就去掉泛型
al1.getClass()==al2.getClass()证明了编译完去掉泛型
泛型通配符,上,下限定边界
限定通配符的上边界:
Vector<? extends Number> x=new Vector<Integer>();//正确
Vector<? extends Number> x=new Vector<String>();//错误
限定通配符的下边界:
Vector<? super Integer> x=new Vector<Integer>();//正确
Vector<? super Integer> x=new Vector<String>();//错误
代码部分如下
/*没有使用泛型将会警告,还要强制类型转换
* ArrayList al=new ArrayList<E>();
al.add(1);
al.add(1L);
al.add("abc");
int i=(Integer) al.get(1);
*/
//反射中使用泛型,省了类型转换
Constructor<String> constructor=String.class.getConstructor(StringBuffer.class);
String str=constructor.newInstance(new StringBuffer("abc"));
System.out.println(str.charAt(2));
ArrayList<String> al1=new ArrayList<String>();
ArrayList<Integer> al2=new ArrayList<Integer>();
System.out.println(al1.getClass()==al2.getClass());//如果为true证明是同一份字节码
//al2.add("abc");
//al2为一个Integer类型的ArrayList集合,用反射方法穿透泛型向al2中加入一个字符串
al2.getClass().getMethod("add", Object.class).invoke(al2, "abc");
System.out.println(al2.get(0));
//泛型中的类型不考虑继承关系
//Vector<Object> v=new Vector<String>();//错误的,不写<>没错,写了是明知故犯前后不匹配
实验证明了泛型是告诉编译器用的,且提高了使用安全性。
相关文章推荐
- 黑马程序员—Java学习笔记之必须掌握的反射技术
- 黑马程序员_Java反射技术(一)
- 黑马程序员_Java高薪技术之泛型
- 黑马程序员——java反射技术
- 黑马程序员—java技术blog—第十一篇:泛型
- 黑马程序员--Java基础加强--17.利用反射操作泛型VI【泛型类型变量的语义】【GenericDeclaration接口】【泛型接口TypeVariable】【通过Class反射解析泛型类】
- 黑马程序员——Java新技术反射技术1
- 黑马程序员——Java新技术反射技术2
- 黑马程序员-java反射技术
- 通过java反射技术获取泛型的真实类型并对其实例化
- 黑马程序员_Java基础_泛型的使用,通配符,泛型限界
- 黑马程序员——Java 反射技术
- 黑马程序员_Java反射技术学习总结
- 黑马程序员--Java基础加强--12.利用反射操作泛型I【与反射+泛型相关的接口类型综述】【Type】【ParameterizedType】【个人总结】
- 黑马程序员--Java基础加强--05.【泛型通配符】【个人总结】
- 黑马程序员—java核心技术—反射
- 黑马程序员-JAVA 高级技术(泛型)
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- javaweb-day22-1(基础加强 - 反射泛型、通配符、有限制的通配符)