《黑马程序员》泛型

泛型其实就是让编译器(javac)。编译时进行类型转化的。

 

可以用反射骗过编译器

 

ArrayList<Integer> collection=new ArrayList<Integer>();
 
collection.add("abc");

 

此时编译器将不能通过。其实编辑器估计都不能通过吧。

 

collection.getClass().getMethod("add",Object.class).invoke(collect,"abc");

此时已经将abc添加进去了

 

 2.参数化类型不考虑类型参数的继承关系

 

Vector<String> v=new Vector<Object>();//错误!
Vector<Object> v=new Vector<String>();//错误!!
 
collectionPrint(new ArrayList<String>);//错误!不能调用 其实就是相当于:Collect<Object>=new ArrayList<String>
 
public void  collectionPrint(Collect<Object>  collect){}

 

可以用统配符解决以上问题,注意使用?号通配符时,主要用作引用,只能调用与参数无关的方法

 

3.创建数组实例时,数组的元素不能使用参数化的类型。

 

Vector<String> vList[]=new Vector<Object>()[10];//错误!!

 

4.限定通配符

 

限定通配符的上边界:Vector<? extends Number> Number或者是Number的子类都可以匹配

 

限定通配符的下边界: Vector<? super Number>Number或者是Number的父类

 

限定通配符总是包括自己。

 

5.泛型是个<T> 是个Object,必须是个引用类型,不能是基本类型。

 可以定义异常类型的T但是不能catch。可以throw(T),或者声明throws T

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值