数据结构 - 泛型

news2024/12/23 21:00:35

目录

前言

1. 什么是泛型?

2. 为什么需要泛型?

引入泛型之前

引入泛型之后

3.泛型类

4.泛型的界限

1.上下界

2.通配符


前言

今天给大家介绍一下泛型的使用


1. 什么是泛型?

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的 代码,这种刻板的限制对代码的束缚就会很大。

                                                                                      ----- 来源《Java编程思想》对泛型的介绍。

泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。

2. 为什么需要泛型?

引入泛型之前

我们不妨先来看一个例子

目前来看一切正常,你可能还会说: 这不是挺好的吗?

我只能说: 别急

多态的弊端是无法访问子类的特有功能

现在你感觉如何?

虽然在这种情况下,当前集合任何数据都可以存放,但是,更多情况下,我们还是希望他只能够持有一种数据类型。而不是同时持有这么多类型。所以,泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。

引入泛型之后

可以看到,编译直接报错.需要被提供的类型和真实提供的类型不匹配!
泛型是在jdk5引入的,在jdk7时为了简化开发,java7增加了一个语言特性,称为菱形运算符<>

ArrayList<String> list = new ArrayList<>();

3.泛型类

应用场景: 当一个类中,某个变量的类型不确定时,就可以定义带有泛型的类

上面的例子中的ArrayList就是通过泛型来实现的

此处的E可以理解为变量,用来记录数据的类型(字母可以随意定义,常用为E,T,V,K,

E 表示 Element K 表示 Key V 表示 Value N 表示 Number T 表示 Type)

除了泛型类之外,还有泛型方法和泛型接口,和泛型类没什么本质区别,大家自行了解即可。

4.泛型的界限

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

1.上下界

在Java的泛型中,可以使用上界(Upper Bounds)和下界(Lower Bounds)来限制泛型类型的范围。

上界使用extends关键字来定义,表示泛型类型必须是指定类或其子类。例如,T extends Number表示T必须是Number类或其子类。在使用上界时,可以使用多个上界,使用逗号分隔。例如,T extends Number & Comparable表示T必须是Number类及其子类,并且实现了Comparable接口。

下界使用super关键字来定义,表示泛型类型必须是指定类或其父类。例如,T super Integer表示T必须是Integer类或其父类。

使用上界和下界可以提供更加灵活的泛型类型限制,使得泛型类型可以满足特定的要求。例如,使用上界可以确保泛型类型具有某些特定的方法或属性,而使用下界可以确保泛型类型可以接受某些类型的参数。

2.通配符

通配符(Wildcard)是Java泛型中的一种特殊符号,用于表示未知类型。

通配符有两种形式:?? extends T

?表示任意类型,可以用来表示不确定的类型。

? extends T表示类型的上界,表示泛型类型必须是T类型或其子类。

通配符可以用于方法的参数类型、返回类型、变量类型等位置,通过使用通配符,可以使泛型更加灵活和通用。

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

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

相关文章

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码&#xff0c;短视频seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云存储批量视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff0c;站内实现关键词、短视频批量搜索排名&#xff0c;数据统计分类多功能细节深度…

在多台服务器上运行相同命令(二)、clush

介绍安装配置互信认证参数含义基本使用节点组拷贝文件 介绍 Clush&#xff08;Cluster Shell&#xff09;是一个用于管理和执行集群操作的工具&#xff0c;它允许你在多台远程主机上同时执行命令&#xff0c;以便批量管理服务器。Clush 提供了一种简单而强大的方式来管理大规模…

MySQL:远程连接数据库(2)

环境 两台centos7 其中一台安装MySQL数据库 192.168.254.1 另外一台安装mariadb最小化安装mysql仅供MySQL连接 或者安装完整版mysql也是可以的&#xff0c;只要支持mysql命令即可 192.168.254.2 开始部署 我们如果让那个用户可以远程连接&…

一步解决Android Studio没有提示的问题

问题 我们在使用安卓开发软件的时候常常会遇到没有提示或提示不全的情况&#xff0c;这样会很影响我们的学习效率,接下来我来教大家快速解决这个问题 解决办法 应用完成后点击ok&#xff0c;提示就可以出来了 如果有适配的版本到这里就可以了&#xff0c;没有的话可以继续往下看…

怎么删除文件夹?这才是正确操作方法!

“作为一名电脑小白&#xff0c;想问问大家&#xff0c;我想把文件夹一整个删除&#xff0c;但是没法操作是为什么呀&#xff1f;应该怎么正确删除文件夹呢&#xff1f;求解答&#xff01;” 在电脑使用过程中&#xff0c;有时我们需要删除不再需要的文件夹以释放磁盘空间或整理…

ISP图像信号处理——白平衡校正和标定介绍以及C++实现

从数码相机直接输出的未经过处理过的RAW图到平常看到的JEPG图有一系列复杂的图像信号处理过程&#xff0c;称作ISP&#xff08;Image Signal Processing&#xff09;。这个过程会经过图像处理和压缩。 参考文章1&#xff1a;http://t.csdn.cn/LvHH5 参考文章2&#xff1a;htt…

打造综合性品牌阵地 阿里元境引领元宇宙营销创新升级

9月21日&#xff0c;由中国商务广告协会主办&#xff0c;中国商务广告协会元宇宙营销应用研究工作委员会、南京大学中德社会计算研究所、南京大学中德数字营销实验室联合主办的“聚力共生”元宇宙学术及商业应用论坛启幕。阿里元境副总经理、市场负责人史敏君出席了论坛“多元聚…

SSE 推送技术

1、简介 Server-Sent Events&#xff08;SSE&#xff09;技术&#xff0c;它是一种用于实现服务器向客户端实时单向推送数据的Web技术。 SSE基于HTTP协议&#xff0c;允许服务器将数据以事件流&#xff08;Event Stream&#xff09;的形式发送给客户端。客户端通过建立持久的HT…

一些数学公式的几何意义

三角函数平方和公式&#xff1a; 三角函数中的平方和公式有三个形式&#xff1a; 第一种&#xff1a;&#xff1b; 接着两边同时除以可以得到第二种&#xff1a;; 或第一种同时除以可以得到第三种&#xff1a;。 首先我们做一个单位圆&#xff0c;我们学三角函数的时候应该…

当两界交汇:前端开发、后端开发与全栈开发的对比与选择

编程世界就像一座大城市&#xff0c;前端开发和后端开发就像城市的两个不同街区。在这两个街区&#xff0c;前端和后端开发都有自己的价值和机会。 一、引言 有些人更喜欢在前端创造令人印象深刻的用户界面&#xff0c;而有些人更喜欢处理数据和系统逻辑。在选择时&#xff…

Topaz Gigapixel AI6.3.2(图片无损放大)

Topaz Gigapixel AI是一款功能实用的图像无损放大工具。它的特色之处在于&#xff0c;通过使用先进的深度学习方法&#xff0c;它能够将照片放大高达600%&#xff0c;同时完美保留图像的质量。 此外&#xff0c;Topaz Gigapixel AI还具有一些其他的特色功能。 它能自动进行面…

ABB DDC779BE02 3BHE006805R0002 控制主板模块

ABB DDC779BE02 3BHE006805R0002 控制主板模块用于自动化和控制系统中&#xff0c;它们可能具有以下一些常见特点和功能&#xff1a; 处理能力&#xff1a;ABB DDC779BE02 3BHE006805R0002 控制主板模块通常具有强大的处理能力&#xff0c;可以执行复杂的控制算法和逻辑。 多种…

软件测试之网站测试怎么做?有什么作用?

网站测试是指对一个已经搭建好的网站进行功能、性能、安全等方面的测试。作为一家专注于软件测试的公司&#xff0c;我们清楚地知道网站测试在整个软件开发过程中的重要性。   一、网站测试怎么做?   1、确保测试环境的稳定和一致性&#xff0c;包括操作系统、浏览器版本等…

AnV-X6使用及总结

目录 1 简介2 安装3 基础概念3.1 画布Graph3.2 基类Cell3.3 节点Node3.4 边Edge 4 使用4.1 创建节点4.2 节点连线4.3 事件系统 5 总结 1 简介 AntV是一个数据可视化&#xff08;https://x6.antv.antgroup.com/&#xff09;的工具&#xff08;https://antv.vision/zh/ &#xf…

IPv6的主要优势有哪些?

第一&#xff0c;明显地扩大了地址空间。IPv6采用128位地址长度&#xff0c;几乎可以不受限制地提供IP地址&#xff0c;从而确保了端到端连接的可能性。 第二&#xff0c;提高了网络的整体吞吐量。由于IPv6的数据包可以远远超过64k字节&#xff0c;应用程序可以利用最大传输单元…

RFID技术引领汽车零部件加工新时代

RFID技术的兴起引领了汽车零部件加工领域的新时代&#xff0c;作为一种利用无线电频率进行自动识别的技术&#xff0c;RFID技术能够快速、准确地识别物体并获取相关数据&#xff0c;在汽车零部件加工中&#xff0c;RFID技术具有重要的应用价值&#xff0c;可以提高生产效率、降…

idea环境下如何打包可运行jar?

工作中有时候偶尔写一些工具类、小程序&#xff0c;可是java程序员制作一个可运行jar实在折腾&#xff0c;利用idea开发环境&#xff0c;可以快速打包自己的可运行jar。具体怎么操作呢&#xff1f; 创建一个空白的java项目并完成自己的程序开发 完成java代码&#xff1a; /**…

Vue以及整合ElementUI

初始化vue项目 #vue 脚手架使用 webpack 模板初始化一个 appname 项目 vue init webpack appname启动 vue 项目 #项目的 package.json 中有 scripts&#xff0c;代表我们能运行的命令 npm start npm run dev #启动项目 npm run build&#xff1a;将项目打包项目结构 运行流程…

【AI视野·今日Robot 机器人论文速览 第四十二期】Wed, 27 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 27 Sep 2023 Totally 48 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;***Tactile Estimation of Extrinsic Contact,基于触觉的外部接触估计与稳定放置 (from 三菱电机) Daily Robotics Pape…

这才是连锁商店的必杀技,你的太Low了!

随着社会的不断发展和技术的进步&#xff0c;视频监控系统在各个领域的应用变得越来越广泛。无论是商业、政府、教育还是个人领域&#xff0c;视频监控系统都扮演着重要的角色。 此外&#xff0c;视频监控系统不仅提供了安全性和保护&#xff0c;还为各种管理和监测任务提供了强…