java泛型详解,史上最全图文详解!

mikechen的互联网架构 mikechen的互联网架构     2022-11-28     165

关键词:

noGenericnames useGenericnames list s listlist s listabT abT valuevalueT getValuevaluesetValuevaluename number showshowvalueshowvaluegenericInterface g1 g2 T genercMethodtmainargsgenericString  str genericStringi genericStringjavajava

  • A

  • java

  • 上面这些泛型类定义中的泛型参数E、K和V都是什么意思呢?

    其实这些参数名称是可以任意指定,就想方法的参数名一样可以任意指定,但是我们通常会起一个有意义的名称,让别人一看就知道是什么意思。

    常见泛型参数名称有如下:

    E:Element (在集合中使用,因为集合中存放的是元素)
    T:Type(Java 类)
    K:Key(键)
    V:Value(值)
    N:Number(数值类型)
    ?:表示不确定的java类型

    六:泛型的实现原理

    泛型本质是将数据类型参数化,它通过擦除的方式来实现,即编译器会在编译期间「擦除」泛型语法并相应的做出一些类型转换动作。

    看一个例子就应该清楚了,例如:

    1. T num

    2. num T num;

    这种情况的泛型类型,num 会被替换为 String 而不再是 Object。

    这是一个类型限定的语法,它限定 T 是 String 或者 String 的子类,也就是你构建 Caculate 实例的时候只能限定 T 为 String 或者 String 的子类,所以无论你限定 T 为什么类型,String 都是父类,不会出现类型不匹配的问题,于是可以使用 String 进行类型擦除。

    实际上编译器会正常的将使用泛型的地方编译并进行类型擦除,然后返回实例。但是除此之外的是,如果构建泛型实例时使用了泛型语法,那么编译器将标记该实例并关注该实例后续所有方法的调用,每次调用前都进行安全检查,非指定类型的方法都不能调用成功。

    实际上编译器不仅关注一个泛型方法的调用,它还会为某些返回值为限定的泛型类型的方法进行强制类型转换,由于类型擦除,返回值为泛型类型的方法都会擦除成 Object 类型,当这些方法被调用后,编译器会额外插入一行 checkcast 指令用于强制类型转换,这一个过程就叫做『泛型翻译』。

    七:最后

    以上我就分别从Java泛型的本质,再到泛型的使用,以及泛型的实现原理等六个方面进行了完整详解,希望对你有所用!


    以上!




    必看●文章干货

    JVM(Java虚拟机)从0到1全部合集,强烈建议收藏!
    Java多线程与并发系列从0到1全部合集,强烈建议收藏!
    单点登录SSO的实现原理与方案详解
    史上最强消息队列MQ万字图文总结!

    必看●视频干货

    如何快速达到50W+年薪?我的独家经验分享!
    如何高效进阶架构师?我的独家三部曲!必看!
    阿里P6->P7->P8的技能要求?独家完整揭秘!
    2022金三银四最新一线大厂Java必考题解析!进大厂必看!

    关注「mikechen的互联网架构」公众号,回复架构,领取我原创的300期+BAT架构技术系列文章与1000+大厂面试题答案合集


    如果你对大厂架构、大厂项目、进阶架构师等感兴趣或者遇到职业发展瓶颈想交流,关注「mikechen的互联网架构」公众号,回复【交流】,即可加我微信,一起交流学习。



    「万字图文」史上最姨母级java继承详解(代码片段)

    ...分享自华为云社区《「万字图文」史上最姨母级Java继承详解丨【奔跑吧!JAVA】》,原文作者:bigsai。课程导学在Java课堂中,所有老师不得不提到面向对象(ObjectO 查看详情

    深入java微服务之网关系列4:springcloudgateway详解(史上最全)(代码片段)

    1.1 SpringCloudGateway简介SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。SpringCloudGateway作为Sp... 查看详情

    史上最全的mavenpom.xml文件教程详解

    原文地址:http://blog.csdn.net/yaerfeng/article/details/26448417原创整理不易,转载请注明出处:史上最全的mavenpom.xml文件教程详解代码下载地址:http://www.zuidaima.com/share/1781583829978112.htm<project xmlns& 查看详情

    图文详解java泛型,写得太好了!(代码片段)

    ##泛型——一种可以接收数据类型的数据类型,本文将通俗讲解Java泛型的优点、方法及相关细节。一、泛型的引入我们都知道,继承是面向对象的三大特性之一,比如在我们向集合中添加元素的过程中add()方法里填入... 查看详情

    深入java微服务之网关系列3:springcloudalibabagateway详解(史上最全)(代码片段)

    九、服务网关:Gateway9.1、网关简介    大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微... 查看详情

    史上最全jenkinspipeline流水线详解

    原文链接:​​​https://zhangzhuo.ltd/articles/2022/06/04/1654333399919.html​​​一、什么是流水线jenkins有2种流水线分为声明式流水线与脚本化流水线,脚本化流水线是jenkins旧版本使用的流水线脚本,新版本Jenkins推荐使用声明式流水线... 查看详情

    kafka源码分析10:副本状态机replicastatemachine详解(图解+秒懂+史上最全)(代码片段)

    文章很长,建议收藏起来,慢慢读!Java高并发发烧友社群:疯狂创客圈奉上以下珍贵的学习资源:免费赠送经典图书:《Java高并发核心编程(卷1)》面试必备+大厂必备+涨薪必备加尼恩免费领免... 查看详情

    史上最全web.xml配置文件元素详解

    ...web.xml配置文件常用元素及其意义预览二、各个配置元素详解1.Web应用图标:指出IDE和GUI工具用来表示Web应用的大图标和小图标2.Web应用名称:提供GUI工具可能会用来标记这个特定的Web应用的一个名称3.Web应用描述:给出于此相关... 查看详情

    史上最全面的springboot配置文件详解(代码片段)

    SpringBoot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍。SpringBoot配置文件对SpringBoot来说就是入门和基础,经常会用到,所以写下做个总结以便日后查看。1.配置文件当我们构建完SpringBoot项目后,会... 查看详情

    史上最全的pom.xml文件详解

    史上最全的pom.xml文件详解https://blog.csdn.net/jk418756/article/details/87917776?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-87917776-blog-100622951.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=d... 查看详情

    史上最全echarts可视化图表详解(代码片段)

    ...配置项包括每一个环节比较容易出现的问题来为大家进行详解。•安装echarts图表•使用echarts图表•echarts图表那些你一定会用到的配 查看详情

    jmeter之json提取器详解(史上最全)(代码片段)

    参考资料:https://www.bbsmax.com/A/D854lmBw5E/Jsonpath在线测试:http://jsonpath.com/实际工作中用到的一些场景:提取某个特定的值提取多个值按条件取值阵列取值(返回所有元素的列表/数组)提取多个值Jsonpath提取器需要另外安装下载plugi... 查看详情

    史上最全的maven的pom.xml文件详解(代码片段)

    本文转自:https://www.cnblogs.com/hafiz/p/5360195.html原作者:阿豪聊干货<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 查看详情

    史上最全的mavenpom.xml文件教程详解

    ...#xff0c;转载请注明出处:史上最全的mavenpom.xml文件教程详解代码下载地址:http://www.zuidaima.com/share/1781583829978112.htm<project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... 查看详情

    springboot第二弹,配置文件详解-史上最全

    ...布尔,日期对象、Map数组@ConfigurationProperties(prefix="person")详解标注在类上标注在方法上综上所述 @ConfigurationProperties注解能够轻松的让配置文件跟实体类绑定在一起。 值得关注的是:@ConfigurationProperties这个注解仅仅是支... 查看详情

    史上最全详解微服务技术栈

    一、认识微服务单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。优点:架构简单、部署成本低缺点:耦合度高 分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立... 查看详情

    python面试合集史上最全面python面试题和详解(10套)完整版

    ...可以以文本的形式打开。内容如题,全面的Python面试题和详解,需要的朋友可下载试试!包含:2019Python最新面试题及答案16道题、110道Python面试题(上)、最常见的35个Python面试题及答案(2018版)、整理的最全python常见面试题(... 查看详情

    史上最全的go语言模块(module)管理详解(基于go1.19)(代码片段)

      目录1.使用gomodules方式管理Go模块2.使用工作区管理Go模块3.设置全局模块名4.在VSCode中使用工作区模式管理Go模块   go语言一直到1.10,都是使用GOPATH设置模块搜索路径,但从1.11开始,引入了新的Go模块管理机制࿰... 查看详情