java泛型总结

2021-01-12  本文已影响0人  Mythqian

0、泛型定义:在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化。例如在哈希表的存取中,JDK1.5之前使用HashMap的get()方法,返回值就是一个Object对象,由于Java语言里面所有的类型都继承于java.lang.Object,那Object转型为任何对象成都是有可能的。但是也因为有无限的可能性,就只有程序员和运行期的虚拟机才知道这个Object到底是个什么类型的对象。在编译期间,编译器无法检查这个Object的强制转型是否成功,如果仅仅依赖程序员去保障这项操作的正确性,许多ClassCastException的风险就会被转嫁到程序运行期之中

1、泛型方法& 泛型类 & 泛型接口
(1)泛型类实现泛型接口


1.png
2.png

(2)泛型方法定义


3.png

2、限定类型变量(T extends 类&接口&...&接口)


4.png

** 多个类型限定 ,类必须放在第一个,有且仅有一个类限定其他都是接口限定

3、泛型中的约束和局限性
(1)不能实例化类型变量
(2)不能在类中的静态域中引用类型变量(静态方法本身是泛型方法是可以的)
(3)泛型类型变量不能是基本类型
(4)泛型不支持instanceof关键字
(5)不能实例化泛型数组
(6)泛型类不能继承 Exception /Throwable 类,也不能捕获泛型类对象


5.png 6.png

4、通配符(因为泛型的继承关系限制所以引出 ? extends T 和 ? super T)
(1)? extends T 用来读数据


7.png

(2)? super T 用来写数据


8.png

5、虚拟机如何实现泛型?
(1)进行泛型擦除(伪泛型)
(2)在用到泛型类的地方进行强转
(3)泛型类型弱记忆在Signature类中
**注意:方法重载中的泛型参数


9.png
上一篇下一篇

猜你喜欢

热点阅读