网站工程师培训,商城网站建设目标,如何做彩票销售网站,哈尔滨网络公司如何文章目录 一、什么是泛型2、泛型编译前和编译后对比3、泛型的优点#xff08;1#xff09;提高了代码的复用性和可读性#xff08;2#xff09;提高了代码的安全性 二、泛型的定义1、泛型类2、泛型接口3、泛型方法 三、泛型通配符1、#xff1f;和T有什么区别2、通配符的分… 文章目录 一、什么是泛型2、泛型编译前和编译后对比3、泛型的优点1提高了代码的复用性和可读性2提高了代码的安全性 二、泛型的定义1、泛型类2、泛型接口3、泛型方法 三、泛型通配符1、和T有什么区别2、通配符的分类1、无界通配符2、泛型的上界通配符3、泛型的下界通配符 四、PECS原则五、泛型的类型擦除 一、什么是泛型
泛型起到的作用就是将类型参数化在不创建新类的情况下通过创建对象实例或应用时确定具体的数据类型以提高代码的复用性以及用以解决类型爆炸问题。
例如集合类中使用了泛型可以存储任意的对象这些对象公用集合类中定义的方法和处理逻辑不需要为每个对象重新定义集合类实现了代码复用以及防止了类型爆炸问题。 例如ArrayLlist泛型类虽然在实例化对象时可以指定具体的泛型变量类型但是都对应同一个类对象 上面的代码声明了两个ArrayList实例对象并指定的具体的泛型值从上面的代码的运行结果来看它们具有相同的class对象。strList和intList在编译时是两个不同的类型但是在编译完成后会进行类型擦除我们可以使用java反编译工具进行类型擦除验证 执行命令jad -sJava Demo.class 结果 通过上面的实验可以得到的结论就是在进行代码编译后进行了泛型的类型擦除操作。
2、泛型编译前和编译后对比
编译前 编译后 对class使用jad进行反编译jad -sJava Demo.class 从上面的验证可以看出编译后对泛型的类型进行了类型擦除操作使用Object替换泛型在使用时进行了类型转换调用function方法是返回值进行了强制类型转换。
3、泛型的优点
1提高了代码的复用性和可读性
如果不使用泛型会为多个不同类型的对象创建多分处理逻辑相同的代码然而泛型可以让我们编写通用的代码处理逻辑只需要我们在使用时将泛型具体化到具体的类型即可。泛型在使用时只需要根据我们的需求指定具体的类型不需要额外的操作根据具体的类型我们就可以判断出程序的意图有较强的可读性。
2提高了代码的安全性
以集合容器为例如果使用Object在运行的时候需要进行手动的强制类型转换可能出现类型转换异常但是在编译期没有任何的错误提示。
如果使用泛型在编译期进行类型安全性检查避免运行时出现类型转换异常。
二、泛型的定义
泛型可以定义在类、接口和方法中分别称为泛型类、泛型接口和泛型方法
1、泛型类
把泛型定义在类上。格式为修饰符class 类名泛型类型1… 示例演示
ublic class ToolQ {private Q q;public Q getObj(){return q;}public void setObj(Q q) {this.q q;}
2、泛型接口
把泛型定义在接口上格式修饰符 interface接口名泛型类型 示例演示
interface InterT {public void show(T t);
}3、泛型方法
把泛型定义在方法上格式修饰符 泛型类型 返回值类型 方法名(类型 变量名) { }。 示例演示
public T void demo(T t) { //具体方法逻辑
} 三、泛型通配符
通配符在编码使用上存在着一些约定成俗的规范这些规范让代码的可读性更高此外并无其他的作用
T: 表示任意类型E: 表示集合类型K、V表示键值对类型泛型通配符? 表示未知类型如果没有明确指定那么就表示Object以及任意的Java类型。
1、和T有什么区别
通配符只能用作引用参数。可当做变量来使用不可以单独使用且不可以对元素做修改、新增等操作。 通配符不可以直接用在类上 通配符不可以直接用在方法上 T可以单独使用可以声明类、接口和方法
2、通配符的分类
1、无界通配符
无界通配符使用表示可以匹配任意类型。例如List?表示一个位置的列表在操作时只能进行查看操作不能进行修改、新增操作因为无法确定添加的元素是否与列表的元素一致。
2、泛型的上界通配符
泛型的上界通配符的格式为? extends E其中E表示类型参数。上界通配符表示可以匹配E或者E的子类指定了泛型的类型范围。仅仅可以进行获取操作。 案例分析 反编译字节码
3、泛型的下界通配符
反省的下界通配符的格式为? super E 其中E表示类型参数下界通配符表示可以匹配E或者E的父类指定了泛型的类型范围。可以进行新增和获取操作 案例分析 反编译字节码
四、PECS原则
PECS原则的全称是Producer Extends Consumer Super上界生成下界消费
五、泛型的类型擦除
泛型的类型擦除有一下特点
java泛型只在编译期有效在编译成字节码文件后泛型类型被擦除被替换成Object。