黑马程序员_java中泛型(通配符)与反射技术

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

实验证明了泛型是告诉编译器用的,且提高了使用安全性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值