J2SE泛型1
?本篇文章是第7版Core Java2第13章的读书笔记。
?
所谓泛型从直观上看就是含有<T>这样的表示,T是包括自定义类在内的所有从Object继承的类(因此,int,double等基本数据类型不能使用泛型)。使用泛型典型的例子即是容器类,比如ArrayList<E>,Map<K,V>等。
?
以上可以被概括为下面三句话:
1,? 虚拟机中没有泛型,只有普通的类和方法。
2,? 所有的类型参数都用它们的边界替换。
3,? 为保持类型安全性,必要时会自动插入强制类型转换。
?
泛型的类型
我们考虑下面一段伪代码: Pair<String> stringPair=......; Pair<Employee> employeePair=......; if(stringPair.getClass()==employeePair.getClass())
?这条if语句的结果是什么呢?实际上,在类型比较的时候<T>会被忽略,可以看到的只是类Pair。因此,比较的结果是true。同样,if(stringPair instanceof Pair<T>)也是真。
我们需要注意的是,无论何时使用instanceof或者涉及泛型类型的强制类型转换表达式编译器都会产生一个警告。
?
泛型的限制
1,泛型不能应用于数组
2,泛型类型不能实例化,也就是说我们不能对泛型类型使用new表达式
3,在静态域和静态方法中也不能使用泛型
?