java中的泛型

泛型(方法和接口的兼容)

泛型概述

  • 泛型的介绍

    泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制

  • 泛型的好处

    1. 把运行时期的问题提前到了编译期间

    2. 避免了强制类型转换

  • 泛型的定义格式

    • <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: <E> <T>

    • <类型1,类型2...>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>

  • Java中的泛型是伪泛型。

    其实我们在编码时期所指定的泛型,只在代码编译时期可以看到,当我们编写的类生成字节码文件之后,我们加入的泛型 <数据类型> 就会消失,不会在字节码中体现出来,这种现象在Java中有个专业的名词就叫 "泛型的擦除"。

    • 泛型擦除概念:在JVM中一切关于对T的传参都不再有效,都将被向上转译成相应的其他类型,何为向上转译,且听我细细道来:可以代表任意类类型,但任意类类型的直接父类都是Object,而<T extends 类类型>的直接父类是<T extends 类类型>中的类类型,这就是所谓的向上转译。

    • 泛型擦除规则: 对于没有继承的T(其他字母代替也可以,这没有特别要求),即擦除后转译为Object类型,但如果指定了上限,即<T extends 类类型>转译为类类型。

    • 泛型擦除的实质:

      泛型其实可以理解成一个看门大爷,你在添加数据之前,它会看看你要添加的数据类型是否与标注的泛型类型相匹配,不匹配则不会让你存入,匹配的话,在存入之后,容器底层还是会把你存入的所有数据类型当作 Object 类型保存起来,当你取数据的时候,它会做一个强转,再从 Object 类型强转变成泛型对应的类型。这也就是为什么泛型只能写引用数据类型,因为泛型的底层会做一个强转,在存取时会在Object类型与泛型类型之间互相强转,显然,int,float,double等基本数据类型是不能强转为Object类型的,所以泛型必须为引用数据类型,如果想存入 int 类型数据,只能写 int 的包装类 Integer。

知识点

相关推荐
折哥的程序人生 · 物流技术专研2 分钟前
《Java面试85题图解版(三)》上篇:高阶架构设计篇
java·开发语言·后端·面试·职场和发展
吴声子夜歌9 分钟前
Java——ArrayDeque
java·arraydeque
NagatoYukee15 分钟前
Spring/SpringMVC/SprongBoot知识复习
java·数据库·spring
泓博26 分钟前
docker ubuntu源码安装openclaw的常见问题
java·linux·开发语言·ai
YuanDaima204828 分钟前
WSL2 核心中间件部署实战:MySQL、Redis 与 RocketMQ
java·数据库·人工智能·redis·python·mysql·rocketmq
南境十里·墨染春水28 分钟前
线程池学习(一) 理解 进程 线程 协程及上下文切换
java·开发语言·学习
知兀31 分钟前
@Accessors(chain = true)和@Builder链式风格差异
java·开发语言
i220818 Faiz Ul31 分钟前
个人健康系统|健康管理|基于java+Android+微信小程序的个人健康系统设计与实现(源码+数据库+文档)
android·java·vue.js·spring boot·微信小程序·毕设·个人健康系统
组合缺一35 分钟前
agentscope-harness vs solon-ai-harness:Java 智能体「马具引擎」的双雄对决
java·人工智能·ai·llm·agent·solon·agentscope
Javatutouhouduan9 小时前
2026Java面试的正确打开方式!
java·高并发·java面试·java面试题·后端开发·java编程·java八股文