Java中泛型的本质

泛型在Java中经常用到。泛型在本质上是指类型参数化。所谓类型参数化,是指用来声明数据的类型本身,也是可以改变的,它由实际参数来决定。在一般情况下,实际参数决定了形式参数的值。而类型参数化,则是实际参数的类型决定了形式参数的类型。

 

举个简单的例子。方法max()要求返回两个参数中较大的那个,可以写成:

Integer max(Integer a, Integer b){

   return a>b?a:b;

}

 

这样编写代码当然没有问题。不过,如果需要比较的不是Integer类型,而是Double或是Float类型,那么就需要另外再写max()方法。参数有多少种类型,就要写多少个max()方法。但是无论怎么改变参数的类型,实际上max()方法体内部的代码并不需要改变。如果有一种机制,能够在编写max()方法时,不必确定参数a和b的数据类型,而等到调用的时候再来确定这两个参数的数据类型,那么只需要编写一个max()就可以了,这将大大降低程序员编程的工作量。

 

在C++中,提供了函数模板和类模板来实现这一功能。而从JDK1.5开始,也提供了类似的机制:泛型。从形式上看,泛型和C++的模板很相似,但它们是采用完全不同的技术来实现的。

 

在泛型出现之前,Java的程序员可以采用一种变通的办法:将参数的类型均声明为Object类型。由于Object类是所有类的父类,所以它可以指向任何类对象,但这样做不能保证类型安全。

 

泛型则弥补了上述做法所缺乏的类型安全,也简化了过程,不必显示地在Object与实际操作的数据类型之间进行强制转换。通过泛型,所有的强制类型转换都是自动和隐式的。因此,泛型扩展了重复使用代码的能力,而且既安全又简单。

 

 

相关链接:

★  Java知识点汇总 

全球软件项目外包平台 兼职做外包 挣Money!

基于FPGA的NCO实现 NCO实现原理 数字振荡器 输出频率,相位可控的正弦波,精度高,稳定性高,替代VCO,用起来方便也易于操作。 实现方式: 直接调用fpga里面的ip核,以下是IP核的配置方法: 接下来选择输出为单路还是多路: 最后生成ip核时需要注意的事项: 生成时会需要漫长的等待,因此需要如下操作: 最后成功生成: 实现代码: input clk ; input rst_n ; output [13:0]fsin_i ; wire [13:. 阅读详情

相关推荐

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 301

深入解读泛型

泛型的本质: 泛型就是广泛的类型,就是在不同类型之间都可以使用的就叫做泛型,使用的是类型里面的方法,所以如果要使用泛型就需要保证使用泛型的类需要有共同的方法,泛型(generics,genericity)又称为“参数类型化(parameterized type)”或“模板(templates)”,是和继承(inheritance)不同而互补的一种组件复用机制。 继承和泛型的不同之处在于——

basycai的博客 917

每日算法讲解(十):使用BP神经网络进行回归任务

BP神经网络是由输入层、隐藏层和输出层组成的多层前馈神经网络,通过反向传播算法(Backpropagation)来调整网络权重和偏置,以最小化预测误差。前向传播:将输入数据通过网络,计算每层的激活值和输出。计算误差:根据预测值和真实值之间的差异计算损失函数值。反向传播:从输出层开始,逐层向后计算梯度,并更新每层的权重和偏置。重复迭代:通过多次迭代,逐步减小预测误差,优化模型参数。接下来,我们定义一个包含一个输入层、两个隐藏层和一个输出层的BP神经网络模型。# 定义模型# 编译模型。

rhtee的博客 1726

泛型的本质

泛型

好好学 307

矩阵管理:一人100账号霸屏小红书,保姆级教程经验技巧

同时,如果你的账号表现很正常,很OK,它也增加账号权重。手机环境:一机一卡一号是基本操作,如果你觉得设备成本高,你就要知道WIN的云真机,一键新机,一键随机设备参数,一键还原,一键安装应用,自带批量发布笔记,私信聚合,自带回复私信,一键养号等等,一人批量注册100个小红书账号真的很简单!从流量逻辑来分析,大家有没有发现,从账号粉丝数来看,小红书很难出现类似抖音上超千万粉丝量级的账号,几十万粉丝的博主已经是头部账号了,原因在于,抖音的流量分发机制是80%的流量集中在 20% 的头部账号而。

FDF432DF的博客 5143

麒麟系统grub被锁怎么办?双密码遗忘救援指南(实测V10 SP3版本)

本文详细介绍了麒麟系统V10 SP3版本在GRUB和root密码双遗忘情况下的救援指南。通过ISO镜像进入救援模式,结合单用户模式操作,实现密码重置与系统权限恢复,特别适用于等保合规环境。

384

泛型总结(通俗易懂)

泛型 1,什么是泛型 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢? 顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参), 然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分

qq_52880445的博客 2万+

2024年游戏策划最新面试题及答案

1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。

guo162308的博客 2320

什么是泛型?

一、泛型的概念 泛型是 Java SE5 出现的新特性,泛型的本质是类型参数化或参数化类型,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。 二、泛型的意义 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。 Java 在引入泛型之前,表示可变对象,通常使用 Object 来实现,...

hncboy的博客 3718

菱Q系列串行通信模块QJ71C24N:概述与特点

该模块支持多种串行通信协议,包括RS-232、RS-422和RS-485等,并提供了可靠的数据传输和高效的通信性能。菱Q系列串行通信模块QJ71C24N是一款功能强大的模块,具有多种通信协议支持、高速数据传输、多点通信能力和简化配置与使用等特点。简化配置和使用:QJ71C24N模块具有简单易用的配置工具和用户界面,使得用户能够快速进行模块的设置和调整。高速数据传输:QJ71C24N模块提供了高速的数据传输能力,可实现快速的数据交换和通信。本文将介绍QJ71C24N模块的概述和特点,并提供相应的源代码示例。

IunScala的博客 1931

R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV

R语言基于机器学习三分类结果、计算三分类混淆矩阵、计算每一个类别对应的特异度(specificity)、灵敏度(sensitivity)、PPV、NPV

data+scenario+science+insight 645

Java泛型详解

泛型的本质是参数化类型,为类型指定一个参数,在使用/调用时由传入的参数确定类型;泛型可以使用在类、接口、方法中,称为泛型类、泛型接口、泛型方法。

weixin_47110792的博客 234

如何通过 GitHub Actions 使用 SSH 自动化部署到阿里云 ECS 实例

通过 GitHub Actions 和 SSH 自动化部署,可以显著提高你的开发效率和部署的可靠性。本文介绍了如何生成 SSH 密钥、将公钥添加到阿里云 ECS 实例、将私钥添加到 GitHub Secrets,以及编写 GitHub Actions 工作流来实现自动化部署。希望这篇文章对你有所帮助!

吃面不喝汤的博客 1511

Java 泛型:从 “语法糖” 到类型擦除的本质

在 Java 编程的世界里,泛型是一个既熟悉又容易被忽略深层原理的特性。它像一层优雅的包装,让代码更简洁、更安全,却又在底层藏着不为人知的 “秘密”。今天,我们就一同揭开 Java 泛型的神秘面纱,从基本使用到底层实现,再到进阶场景,全方位探索它从 “语法糖” 到类型擦除的本质。

Java是世界上最好的语言 1188

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C#和java中泛型的本质区别

转自: 为什么JVM上没有C#语言?浅谈Type Erasure特性 每次提到语言的时候我总是忍不住骂Java是一门生产力低下,固步自封的语言——这估计要一直等到Java语言被JVM上的其他语言取代之后吧。JVM上目前已经有许多语言了:JRuby,Jython;还有一些特定于JVM平台的语言,如Scala和Groovy等等。但是,为什么JVM上没有C#语言呢?按理说,这门和Java

GR 3555

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

从本质上分析Java泛型

现在网上讲泛型的一大堆,但是很多人要么讲一下语法,要么讲几个注意点,读者无法深入了解泛型的本质!所以这篇文章从泛型的起源,本质上,以通俗易懂的方式讲解Java的泛型! Java的泛型的起源 泛型是在java1.5时从c++中借鉴的!在1.5之前是没有泛型这个概念的!为什么要引入泛型呢?因为当时有以下几个问题: 问题一: 那个时候的集合类是这样的: ArrayList list = ne...

只写精品! 548

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java 泛型的本质——类型擦除

泛型总共干了4件事: 编译之前编译器进行的静态分析检查(比如你不能把ArrayList<Integer>里添加string,如果做了无法编译)。 强制转换类型(比如你从ArrayList<Integer>里取一个元素时,编译器隐式地在字节码里添加一句强制转换类型,转换为int)。 在字节码中,用类型参数的限定(如果没有就是Object)来替换所有类型参数(保留上界)。这就是类型擦除。 在继承使用了类型参数的方法时(形参或者返回值的类型是T),用桥方法来保持多态。

anlian523的博客 4657

24、Java入门—反射之通过反射了解集合泛型的本质

Java反射机制——通过反射了解集合泛型的本质 1:反射的操作都是编译之后的操作;就是运行阶段 2:java中集合的泛型是防止错误输入的;只在编译阶段有效,只要绕过编译就无效啦 我们可以通过方法的反射来操作,绕过编译 eg: ArrayList list1=new ArrayList(); ArrayList list2=new ArrayList(); Class c1=list1

gywtzh0889的专栏 320

Java泛型的本质

一、泛型的本质泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用。二、Java泛型Java 泛型是Java1.5新增的特性,JVM并不支持。实现原理:Java源代码里面类型提供实现泛型功能,而编译后Class文件类型就变成原生类型(即类型被擦除掉),而在引用处插入强制类型转换以实现JVM对泛型的支持。本质是Java泛型只是Java提供的一个语...

blog 1972

java泛型篇,泛型作用,泛型本质和原理,泛型中E,T,K,V缩写通常代表什么,泛型类,自定义泛型类,泛型接口,自定义泛型接口,泛型接口详解,泛型方法,通配符,上下限,泛型支持的类型,包装类作用,包装

java泛型篇,泛型作用,泛型本质和原理,泛型中E,T,K,V缩写通常代表什么,泛型类,自定义泛型类,泛型接口,自定义泛型接口,泛型接口详解,泛型方法,通配符,上下限,泛型支持的类型,包装类作用,包装类有哪些,包装类自动装箱,包装类自动拆箱,包装类具备的常用功能。包装类部分:1)实现基本类型对象化;2)八大基本类型对应包装类;3)自动装箱/拆箱机制;4)常用工具方法如parseXxx、valueOf等。二者配合解决Java泛型不支持基本类型的问题。

DeppBing的博客,全栈修炼记|记录一个开发者的进化轨迹 1168

Java反射-泛型的本质

Class类的使用 类是java.lang.class类的实例对象(称为类类型 class type),而这个实例对象有三种表示方式 -第一种表达方式:任何一个类都有一个隐含的静态成员变量 Class c1 = Foo.class; -第二种表达方式:通过对象的getClass的方法获取 Class c2 = foo1.getClass(); -第三种表达方式:通过

我曾想浪迹天涯,却为你舍了心。 1046

java反射泛型类型_java反射之通过反射了解集合泛型的本质(详解)

本文接上文“java反射之方法反射的基本操作方法”,利用反射了解下java集合中泛型的本质1、初始化两个集合,一个使用泛型,一个不使用ArrayList list1 = new ArrayList();ArrayList list2 = new ArrayList();2、有定义类型可得在list2中添加int类型会报错list2.add("Hello");list2.add(20); //报错3...

weixin_28740299的博客 282

JAVA中泛型的本质

以下的内容需要一点点JAVA反射的知识,建议各位小伙伴可以先看一下我的浅析JAVA反射机制(如果实在不想看的话看懂下面的内容应该也不会有大问题,可能会有一点理解困难)。 我们先来看一个程序:AyyayList<String> a = new ArrayList<String>(); a.add("hh"); a.add(20);显而易见,a.add(20)是一个错误的操作,由此引出泛型的基本作用就

geekerhw的博客 1461

一句话,讲清楚java泛型的本质(非类型擦除)

背景 昨天,在逛论坛时遇到个这么个问题,上代码: public class GenericTest { //方法一 public static <T extends Comparable<T>> List<T> sort(List<T> list) { return Arrays.asList(list.toArray...

彤哥读源码 250

Java反射和泛型的本质

1.Class类的使用 其实类也是对象,类是java.lang.Class类的实例对象。 2.动态加载类 我用什么才加载什么,不用就不加载,不影响其他的 3.获取方法信息 4.获取成员变量构造函数信息 5.方法反射的基本操作 通过invoke操作方法 6.通过反射了解集合泛型的本质 泛型的本质其实就是去泛型

来离 674

java的本质_如何理解JAVA泛型本质?

原标题:如何理解JAVA泛型本质?JAVA代码编写的界面很大,编写的过程在新手面前看起是非常有难度,可是对于工程师这种老司机来说还是小菜一碟啦,今天我们来回顾一下JAVA泛型的小知识。泛型是给javac编译器使用的,javac是JAVA的编译器,而泛型可以让代码在编译期间确定类型安全。 上面的代码没问题,可以很好地编译和运行通过,问题是我必须要事先很清楚地知道容器中的索引为0的对象是什么类型,索引...

weixin_29261711的博客 193
上一篇: Java中静态变量的适用场景
下一篇: Java中通过缓冲区提高I/O系能
PengJune
博客等级 码龄21年 9粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值