您的位置:首页 > 职场人生

黑马程序员_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>();//错误的,不写<>没错,写了是明知故犯前后不匹配

实验证明了泛型是告诉编译器用的,且提高了使用安全性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA 泛型
相关文章推荐