当前位置: 首页 > news >正文

对于泛型以及泛型擦除的理解

泛型的定义:泛型的本质就是参数化类型,也就是让数据类型作为参数传递,其中E相当于形式参数负责占位,而使用集合时<>中的数据类型相当于实际参数,用于给形式参数E进行初始化,从而使得集合中所有的E被实际参数替换,由于实际参数可以传递各种各样广泛的数据类型,因此得名为泛型。

泛型修饰类-》泛型类

泛型修饰接口-》泛型接口

泛型修饰方法-》泛型方法

public class Example<T> {  private T t;  public void set(T t) {  this.t = t;  }  public T get() {  return t;  }  
}

在编译后,虽然我们在代码中使用了 Example<String> 或 Example<Integer> 等具体类型,但生成的字节码中的 Example类将不包含这些类型信息。它会被视为一个原始的 Example类,其中 T 被替换为其边界类型(如果没有指定边界,则为 Object)。

泛型 广泛的类型

List lt1 = new LinkedList();

// Java7开始的新特性: 菱形特性 就是后面<>中的数据类型可以省略

List lt3 = new LinkedList<>();

// 笔试考点

// 试图将lt1的数值赋值给lt3,也就是覆盖lt3中原来的数值,结果编译报错:集合中支持的类型不同

//lt3 = lt1; Error

看类是否支持泛型,主要判断其是否有尖括号<> E K T V都可 这样就可以传递参数类型

泛型擦除(编译时,Java编译器会将泛型信息移除):

Java的泛型是伪泛型,使用泛型的时候加上泛型类型参数,在编译器生成的字节码的时候会去掉,这个过程称为泛型擦除。

举例:List等类型,在编译之后都会变成LIst。JVM看到的只有List,而由泛型附加的信息对于JVM是不可见的。

常见父子类泛型分析:

//public class SubPerson extends Person { // 不保留泛型并且没有指定类型,此时Person类中的T默认为Object类型   擦除
//public class SubPerson extends Person<String> {  // 不保留泛型但指定了泛型的类型,此时Person类中的T被指定为String类型
//public class SubPerson<T> extends Person<T> { // 保留父类的泛型  可以在构造对象时来指定T的类型
public class SubPerson<T, T1> extends Person<T> { // 保留父类的泛型,同时在子类中增加新的泛型
}

可以通过反射添加其他类型元素。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Ubuntu防火墙相关命令
  • 【轨物推荐】什么是科学?什么是技术?
  • 仓库管理系统(WMS)是什么?如何用手机RFID+扫码技术管理仓库?
  • 将本地微服务发布到docker镜像
  • vm虚拟机下安装CentOS7系统
  • 力扣第45题:跳跃游戏 贪心DP(C++)
  • 哈佛大学单细胞课程|笔记汇总 (二)
  • Jenkins保姆笔记(1)——基于Java8的Jenkins安装部署
  • 使用Cisco进行模拟RIP路由协议配置
  • 文献解读-肿瘤测序-第二十七期|《敲减通过控制TOP2A下调的NUSAP1可以抑制人胶质母细胞瘤的细胞增殖和侵袭》
  • Prometheus 笔记
  • Stable Diffusion之最全详解图解
  • 采用Spring Cloud +UniApp +MySql技术开发,SaaS模式的一套智慧工地云平台源码,支持多端展示:PC端、大屏端、手机端、平板端
  • 科普文:微服务之Spring Cloud Alibaba组件Nacos一致性协议Distro+Raft概叙
  • 下载qwen2-72b报错
  • [ JavaScript ] 数据结构与算法 —— 链表
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • C# 免费离线人脸识别 2.0 Demo
  • Debian下无root权限使用Python访问Oracle
  • JavaScript HTML DOM
  • Koa2 之文件上传下载
  • mysql外键的使用
  • PHP变量
  • 不上全站https的网站你们就等着被恶心死吧
  • 测试开发系类之接口自动化测试
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 蓝海存储开关机注意事项总结
  • 面试总结JavaScript篇
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用API自动生成工具优化前端工作流
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数据科学 第 3 章 11 字符串处理
  • 最近的计划
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #、%和$符号在OGNL表达式中经常出现
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (003)SlickEdit Unity的补全
  • (1)SpringCloud 整合Python
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (转)编辑寄语:因为爱心,所以美丽
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core 中插件式开发实现
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET中winform传递参数至Url并获得返回值或文件
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @SpringBootConfiguration重复加载报错