泛型Generic

news2024/11/24 15:51:10

泛型

  • 1. 介绍
    • 1.1 使用泛型的好处
  • 2. 自定义泛型结构:泛型类、泛型接口;泛型方法
    • 2.1 泛型类、泛型接口
    • 2.2 泛型方法
  • 3. 其他
    • 3.1 泛型在继承方面的体现
    • 3.2 通配符使用
      • 3.2.1 有限制的通配符

1. 介绍

  • 把元素的类型设计成一个参数,这个类型参数叫做泛型
  • 泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型
  • 这个类型参数将在使用时确定(即传入实际的类型参数,也称为类型实参);
  • JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念,允许我们在创建集合时再指定集合元素的类型;
  • JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参;
  • 泛型的类型必须为具体类,不能为基本数据类型;
  • 如果实例化时,未指明泛型类型,默认类型为java.lang.Object类型

1.1 使用泛型的好处

  • 解决元素存储的安全性问题(编译时就会检查元素类型)
  • 解决获取数据元素时,需要类型强制转换的问题;
  • 使用泛型可以提高类或接口的通用性
    在这里插入图片描述

2. 自定义泛型结构:泛型类、泛型接口;泛型方法

2.1 泛型类、泛型接口

-泛型类可能有多个参数,此时应将多个参数一起放在尖括号内,比如:<E1,E2,E3>;

  • 泛型类的构造器如下:public GenericClass(){},而下面是错误的:public GenericClass(){};
  • 实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致;
  • 泛型不同的引用不能相互赋值
  • 尽管在编译时ArrayList和ArrayList是两种类型,但是,在运行时只有一个ArrayList被加载到JVM中;
  • 泛型如果不指定,将被擦除,泛型对应的类型均按照Object处理,但不等价于Object。经验:泛型要使用一路都用。要不用,一路都不要用;
  • 如果泛型结构是一个接口或抽象类,则不可创建泛型类的对象
  • jdk1.7,泛型的简化操作(类型推断):ArrayList flist = new ArrayList<>();
  • 泛型的指定中不能使用基本数据类型,可以使用包装类替换;
  • 在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型、非静态方法的参数类型、非静态方法的返回值类型,但在静态方法中不能使用类的泛型
  • 异常类不能是泛型的;
  • 不能使用new E[],但是可以:E[] elements = (E[])new Object[capacity],此时数组元素必须为E类型或者E的子类;
  • 子类继承带泛型的父类时,如果父类指定泛型类型,则子类此时不带泛型;
  • 子类继承带泛型的父类时,如果父类不指定泛型类型,则子类此时也是泛型类;
  • 父类有泛型子类可以选择保留泛型也可以选择指定泛型类型:
    1)子类不保留父类的泛型:按需实现
    ①没有类型:擦除
    ②具体类型
    2)子类保留父类的泛型:泛型子类
    ①全部保留
    ② 部分保留
    结论:子类除了指定或保留父类的泛型,还可以增加自己的泛型

在这里插入图片描述
在这里插入图片描述

2.2 泛型方法

  • 在方法中出现泛型结构,该泛型参数与所在类的泛型参数没有任何关系,也就是说:泛型方法所在类可以不是泛型类;
  • 泛型方法可以声明为静态的,因为泛型方法的泛型参数是在该方法被调用时指定,并非在实例化时指定;
    在这里插入图片描述

3. 其他

3.1 泛型在继承方面的体现

  • 如果A是B的父类,G为泛型类,那么G<A>和G<B>不具备子父类关系,二者是并列关系;
    在这里插入图片描述

  • 如果A是B的父类,且A和B均为泛型类,则A<X>是B<X>的父类;

3.2 通配符使用

  • A是B的父类,G为泛型类,则G<A>和G<B>不具备子父类关系,而G<?>为他们的共同父类,其中?为通配符
  • 使用通配符后,可进行读取操作:读取元素永远是安全的,因为不管list的真实类型是什么,它包含的都是Object;
  • 使用通配符后,禁止写入操作:不知道c的元素类型,不能向其中
    添加对象,唯一的例外是null,它是所有类型的成员;
  • 通配符不能用在泛型方法声明上;
  • 通配符不能用在泛型类的声明上;
  • 通配符不能用在创建对象上;

3.2.1 有限制的通配符

  • 通配符指定上限,上限extends使用时指定的类型必须是继承某个类,或者实现某个接口,即<=
    如, G<? extends A>可作为G<A>和G<B>的共同父类,其中B为A的子类;
  • 通配符指定下限,下限super使用时指定的类型不能小于操作的类,即>=
    如, G<? super A>可作为G<A>和G<B>的共同父类,其中B为A的父类;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数组6大排序算法

快速排序 核心算法&#xff1a; 1.取一个基准值&#xff08;一般是数组中间的元素&#xff09;&#xff0c;遍历数组&#xff0c;比基准值大的放右边&#xff0c;小的放左边&#xff0c;相等的则不动 2.分别创建三个数组来存储元素&#xff0c;最后将三个数组拼接起来 3.循…

Java替换Jar文件中的class文件方法

备份源文件 文件不重要的话可以不需要备份&#xff0c;线上环境务必备份方便回滚 mkdir bak cp test.jar bak 查看class文件所在目录 jar -tvf test.jar | grep Time.class 标红内容就是需要替换的class文件&#xff0c;如果有多个文件需要替换依次执行2&#xff0c;3步骤…

webSocket实时通信02——基于Spring【纯后端——JAVA】

这里是基于Spring整合websoket后来实现的实时通信&#xff0c;这里只有java的代码&#xff0c;通过在线网站 http://www.websocket-test.com/测试即可 1. 导包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star…

网络安全合规-职业发展路线

网络安全人才一将难求&#xff0c;缺口高达 95% 在以前&#xff0c;很多政企单位在进行 IT 部门及岗位划分时&#xff0c;只有研发和运维部门&#xff0c;安全人员直接归属到基础运维部&#xff1b;而现在&#xff0c;越来越多单位为了满足国家安全法律法规的要求&#xff0c;…

终极攻略!如何彻底防止Selenium被检测!

在使用Selenium进行爬虫时&#xff0c;许多朋友都会遇到各种反爬措施。 实际上&#xff0c;在绝大多数情况下&#xff0c;网站轻而易举地能够检测出你正在使用WebDriver而非标准浏览器。 本文将详细介绍如何有效防止检测的方法。 在一篇公众号文章《别去送死了。Selenium 与…

【重磅】智能未来 —— 人工智能与城乡规划的交叉对话(CSDN深圳城市开发者社区首场线下技术交流活动)

文章目录 活动主题活动海报活动时间活动地点互动有礼加入有礼赠书简介特别说明 活动主题 智能未来-人工智能与城乡规划的交叉对话 —— 以 AI 为核心主题&#xff0c;探索 AI 在 智慧城市、智能视频、智能编程 等重点领域的技术发展和实战落地。 活动海报 活动时间 2023.06…

加密与解密 调试篇 动态调试技术 (五)-WinDbg

windbg主要厉害的地方是在他可以对内核调试 并且本身微软的产品 对windows调试适配度够高 注意 windbg给出的图形操作并不好用 主要是使用命令行来进行操作 我们省略安装 直接进入调试 file 可以打开软件 可以附加也可以分析dump文件还可以进行内核和 远程调试内核调试分为…

招商基金资深架构师教你如何搭建统一监控平台

随着数字化进程的加速和业务的高速发展&#xff0c;系统的复杂程度日益升级&#xff0c;为确保业务系统的连续性和稳定性&#xff0c;越来越多的企业想要建设统一的监控平台&#xff0c;但却不知道从哪里开始着手。比如&#xff1a; 有些企业会直接将监控系统页面集成到统一监…

SpringBoot配置文件application.yml的理解

一、存放位置分类 1.当前项目根目录下的config目录下 2.当前项目的根目录下 3.resources目录下的config目录下 4.resources目录下 按照这上面的顺序&#xff0c;4个配置文件的优先级依次降低。 二、自定义存放位置和自定义命名 自定义存放位置和自定义配置文件命令和appl…

Python从Excel读取数据并使用Matplotlib绘制成二维图像

本课程实现使用 Python 从 Excel 读取数据&#xff0c;并使用 Matplotlib 绘制成二维图像。这一过程中&#xff0c;将通过一系列操作来美化图像&#xff0c;最终得到一个可以出版级别的图像。本课程对于需要书写实验报告&#xff0c;学位论文&#xff0c;发表文章&#xff0c;做…

Vue中的虚拟Dom,diff算法,以及diff的优化

virtual dom&#xff1a; 关键词&#xff1a; 1、 template 2、渲染函数 3、 vnode(virtual dom) 4、patch(diff算法) 5、view Vue.js通过编译将template 模板转换成渲染函数(render ) &#xff0c;执行渲染函数就可以得到一个虚拟节点树 VNode 虚拟节点&#xff1a;它可以代…

C++ 中的新成员

C 中的动态内存分配 C 中通过 new 关键字进行动态内存申请 C 中的动态内存申请是基于类型进行的 delete 关键字用于内存释放 new 关键字和 malloc 函数的区别 new 关键字是 C 的一部分 malloc 是由 C 库提供的函数 new 以具体类型为单位进行内存分配 malloc 以字节为单位…

Jenkins ——pipeline入门教程

一、什么是pipeline 什么是Pipeline&#xff1f;简单来说&#xff0c;就是一套运行于Jenkins上的工作流框架&#xff0c;将原本独立运行于单个或者多个节点的任务连接起来&#xff0c;实现单个任务难以完成的复杂发布流程&#xff08;实用场景&#xff1a;将多个Jenkins构建任…

最优化方法Python计算:一元函数搜索算法——二次插值法

已知连续函数 f ( x ) f(x) f(x)在 x ∗ x^* x∗近旁存在最优解 x 0 x_0 x0​。对博文《最优化方法Python计算&#xff1a;连续函数的单峰区间计算》讨论的 f ( x ) f(x) f(x)单峰区间的包围算法稍加修改&#xff0c;可算得 f ( x ) f(x) f(x)包含 x 0 x_0 x0​的单峰区间 [ a …

pandas---删除重复行、映射、异常值检测与过滤、抽样

1. 删除重复行 使用duplicated()函数检测重复的行。 返回布尔类型的Series对象&#xff0c;每个元素对应一行&#xff0c;如果该行不是第一次出现&#xff0c;则元素为True。 def make_df(indexs, columns): data [[str(j)str(i) for j in columns] for i in indexs]df …

中国人民大学与加拿大女王大学金融硕士——用更长远的眼光,展望未来

职场中遇到瓶颈&#xff0c;大家都迫切希望改变自己所处的环境&#xff0c;但却不愿意改变自己&#xff0c;所以他们自己仍然是被束缚的。如果一个人不能够从自我拷问的状态中解脱出来&#xff0c;他就永远也不可能实现自己心中的目标。我们要用更长远的眼光去展望未来&#xf…

NAVIGATE 领航者峰会:记忆科技携手新华三,以存储创新释放数据价值

近日&#xff0c;由紫光集团和新华三集团主办的2023 NAVIGATE 领航者峰会在杭州举行。本届峰会的主题为“精耕务实&#xff0c;为时代赋智慧”&#xff0c;围绕该主题&#xff0c;国内外数千名技术领导者汇聚一堂&#xff0c;探讨数字经济的创新未来。作为IT硬件领域的重要厂商…

vue + g6 实现树级结构(compactBox 紧凑树)

G6文档 自定义节点 G6.registerNode("dom-node",{draw: (cfg, group) > {let str <div classitem-box catalog-node ${cfg.isSelected ? "is-selected" : ""} ${cfg.status}-box οnclickhandleDetail("${cfg.id}") id&quo…

JMeter压测如何分配业务比例?

在进行综合场景压测时&#xff0c;由于不同的请求&#xff0c;要求所占比例不同&#xff0c;那如何实现呢&#xff1f; 有人说将这些请求分别放到单独的线程组下&#xff0c;然后将线程组的线程数按照比例进行配置&#xff0c;这种方法不是很好&#xff0c;想想&#xff0c;不…

5G是如何提升通行能力的?5G毫米波到底有多快?

高速公路&#xff0c;可以通过多层交通、多条车道、车道方向、车辆容量、货物包装、驾驶司机等多个因素&#xff0c;提升通行能力。 我们把5G比作高速公路&#xff0c;那么&#xff0c;5G是如何提升自身通行能力的呢&#xff1f;5G毫米波&#xff0c;到底能有多快呢&#xff1f…