java泛型总结2-1之核心概念
程序员文章站
2022-04-23 10:44:34
...
什么是泛型
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法
泛型的优点
1、类型安全
2、前后兼容
3、泛化代码,代码可以更多的重复利用
4、性能较高,用GJ(泛型JAVA)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。
泛型的缺点
1 由于类型擦除,泛型代码中不能提供类型在运行时的操作,比如new instanceOf 等
2 不支持混型,C++通过模板和泛型支持混型,scala通过特质trait支持混型
3 泛型不是在java一开始就有的,是在java5.0加进去的,当把类型代码赋给旧代码时会造成类型信息丢失
泛型的工作原理:
- 1、类型检查:在生成字节码之前提供类型检查
- 2、类型擦除:所有类型参数都用他们的限定类型替换,包括类、变量和方法(类型擦除)
- 3、如果类型擦除和多态性发生了冲突时,则在子类中生成桥方法解决
- 4、如果调用泛型方法的返回类型被擦除,则在调用该方法时插入强制类型转换
泛型方法
边界处的动作(泛型的工作原理的两头部分,1和4)
在传入值的进行额外的编译期的类型检测,在传出值的时候,插入转型代码进行转型
记住"边界就是发生动作的地方". 就是方法进入时和和方法返回值的时候
泛型的协变\ 逆变
协变:<? extends T> 协变,协变后不能插入数据
逆变:<? super class> 协变的相反过程,可以插入数据,但不能协变
<T> 普通泛型,集合不能协变,插入的数据支持协变
桥方法(参考corejava8)
编译过程中,为了解决类型擦除和多态性发生了冲突的问题,于是编译器会在子类中生成一个合成的桥方法,该桥方法是一个父类的重写方法,在方法体中调用冲突的重载方法
上一篇: centos6.8 vim+python 开发环境配置(转)
下一篇: 路径通配符含义
推荐阅读