Java泛型转化的事实:
- 虚拟机中没有泛型,只有普通的类和方法。
- 所有的类型参数都用他们的限定类型替换。
- 桥方法被合成用来保证多态。
- 为了保证类型安全性,必要时插入强制类型装换。
- 不能用基本类型(如:double)实例化类型参数,也就是
只能有Pair<Double>,不能有Pair<double>
- 运行时类型查询只适用于原始类型,也就是说类型查询只产生原始类型,
Pair<String> mm=new Pair<String>();
Pair<Employee> employ=new Pair<Employee>();
if(mm instanceof Pair<String>)//ERROR
if(mm instanceof Pair)//RIGHT
if(mm.getClass()==employ.getClass())//they are equal
其比较结果都是true ,这是因为两次调用getClass()都返回Pair.class - 不能创建参数化类型的数组
Pair<String>[] table=new Pair<String>[10];//ERROR
JDK1.5的新特性:自动装包/拆包(Autoboxing/unboxing)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
通配符
- 带有超类的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取。