泛型 : 你以为你真的了解我吗?
你真的了解我吗?
- 类和接口的一种扩展机制:数据类型参数化(数据类型成了个变量,你填啥数据类型就是啥数据类型),也叫类型参数。
- Java5才有的,从Java SE7开始,创建泛型使用菱形语法就是 <>;
2.1约定:E – 元素;K – 键;V – 值;T – 类型;N – 数字; - 通配符(?)的使用:在泛型方法中List并不是List的子类,这时候就得使用List<?>了,意味着:该方法接受元素是任何类型的list对象。
-
有界类型参数:限制泛型的数据类型的范围。
4.1上界:List<?extends Number> 类型参数可以是Number类型及其子类的;
4.2下界:List<? super Integer> 类型参数可以是Integer类型或是其父类的;
4.3一般意义,接口也是这样使用的。
4.4在<>中再加上 & 接口,表示这个类型参数还实现了某接口; -
泛型擦去:实例化时,编译器使用的一种技术,就是把泛型转换成源类型(raw type)。(就是这时,它具体是什么数据类型就是什么类型)使得泛型能和早期遗留代码(没使用泛型的)兼容。
当然这也意味着:运行时,是找不到泛型到底是什么类型;再有就是generic type与raw type不能混合使用的(不是像类那种的继承关系),会被警告的。
我结束了,你呢?
参考文献:Java语言程序设计(第3版)