Data:3.4
2.0 理解
泛型定义很简单,工具类比较常用泛型(使用上)。
.
泛型:参数化类型,把类型当做参数传进去(事先不固定类型),具体使用的时候再确定类型
.
泛型,即“参数化类型”。顾名思义,就是将类型由原来的具体的类型’参数化’,此时类型也定义成参数形式,然后在使用/调用时传入具体的类型。
2.1泛型擦除
泛型仅存在于编译之前, 在jdk帮我们编译带泛型的代码的时候, 会自动把泛型进行擦除(变成Object)
Java: 尽量把运行时异常, 转化到编译时
a. 提高了程序的安全性
b. 将运行期遇到的问题转移到了编译期
c. 省去了类型强转的麻烦
2.2泛型的写法
泛型类:把泛型定义到类上(基本上就用这个)
格式:public class 类名<泛型类型1,…>
注意:参数化类型必须是引用类型
注意: jdk1.5出现了泛型, jdk1.7 java的泛型做了改进: (后面尖括号泛型可以省略)
User1<String> user11 = new User1<>();
User1<String> user13 = new User1<String>();
泛型方法:把泛型定义在方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型 .)
注意:所谓泛型方法是把泛型 ‘定义在方法上’: (意味着使用到泛型的方法不一定是泛型方法)
泛型接口:把泛型定义在接口上
格式:public interface 接口名<泛型类型1…>
2.3泛型的通配
泛型的通配: 就是java在设计泛型的时候, 为了模拟类似数组的协变功能而产生的
(并且, 泛型的通配, 避免了数组协变的不好地方)
通配的方式:
(1)泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类了
(2)? extends E
向下限定,E及其子类
(3) ? super E
向上限定,E及其父类