初步了解泛型
目录
泛型的引入
泛型
泛型
泛型类
泛型的上界
泛型的引入
之前学习的数组里面是存放着整型或者自字符串中一种的数组,如果想要在一个数组里面放多种类型数据,我们该怎么去做呢?Object类或许是一个好的解决方法,因为Object类是所有类的父类,这样我们可以通过创建一个Object类的数组类解决这个问题。
class MyArray{public Object[] array = new Object[10];//创建一个Object类数组public Object getPos(int pos){return this.array[pos];}//返回对应位置的数据public void setVal(int pos, Object val){this.array[pos] = val;}//在对应的位置里存放数据}
public static void main(String[] args) {MyArray myArray = new MyArray();myArray.setVal(0,10);myArray.setVal(1,"hello");//String ret = myArray.getPos(1);//这里需要强转才能为ret赋值String ret = String.valueOf(myArray.getPos(1));System.out.println(ret);
}
虽然其中所有类型的数据都可以存放,但不难看出,这样的做法会出现以下不便的情况:
- 不同类型的数据需要强转才能输出
- 排序不够整齐,需要记录每个位置放着什么类型的数据
泛型
泛型
虽然当前所有类型的数据都可以存放到其中,但我们更却趋向于让数组内放一种类型的数据
所以,泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。
泛型的语法格式为:
class 泛型类名称<类型形参列表> {
// 这里可以使用类型参数
}
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
在了解泛型的语法格式后,我们可以尝试把上面的Object类数组进行改写。
class MyArray<T>{public Object[] array = new Object[10];public T getPos(int pos){return (T)this.array[pos];}public void setVal(int pos, T val){this.array[pos] = val;}
}public class Test {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();myArray.setVal(0,10);myArray.setVal(1,19);int ret = myArray.getPos(0);System.out.println(ret);//myArray.setVal(2,"not");//不再成立,自动进行类型检查}//对于不同类型的数据,我们可以采用实例化不同的对象来实现MyArray<String> myArray1 = new MyArray<>();myArray1.setVal(2, "not");String ret1 = myArray1.getPos(2);System.out.println(ret1);}
类名后的<T>代表占位符,表示当前类是一个泛型类。
这里我们可以发现,int ret = myArray.getPos(0);中不需要进行类型的强制转换,因为输出的一定是整型数据。
泛型类
泛型类的语法格式为:
泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象
MyArray<Integer> list = new MyArray<Integer>();
泛型只能接受类,所有的基本数据类型必须使用包装类。
如果编译器可以通过上下文推导出数据类型时,我们可以省略后面的类型书写:
MyArray<Integer> list = new MyArray<>();
泛型的上界
泛型的上界的语法格式为:
class 泛型类名称<类型形参 extends 类型边界> {
...
}
public class MyArray {...
}
只接受 Number 的子类型作为 E 的类型实参
相关文章:
初步了解泛型
目录 泛型的引入 泛型 泛型 泛型类 泛型的上界 泛型的引入 之前学习的数组里面是存放着整型或者自字符串中一种的数组,如果想要在一个数组里面放多种类型数据,我们该怎么去做呢?Object类或许是一个好的解决方法,因为Object类…...
【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…...
C++推荐的oj网站
洛谷 信息学奥赛一本通 C语言网 codeforces 杭电oj...
springmvc处理http请求的底层逻辑
http-nio-8088-Poller线程中在org.apache.tomcat.util.net.NioEndpoint.Poller#run这个函数里循环检测selector,若发现有SocketEvent.OPEN_READ事件则会将SelectionKey.attachment中的内容作为入参包装成runable,然后由org.apache.tomcat.util.threads.T…...
干货满满,从零到一:编程小白如何在大学成为编程大神?
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)
1、下载安装docker,最好在vs code里安装docker的插件。 下载链接:https://www.docker.com/products/docker-desktop 🎉 Docker 简介和安装 - Docker 快速入门 - 易文档 (easydoc.net) 2、准备配置文件-dockerfile文件和nginx.conf文件 do…...
零基础学习【Mybatis】这一篇就够了
Mybatis 查询resultType使用resultMap使用单条件查询多条件查询模糊查询返回主键 动态SQLifchoosesetforeachsql片段 配置文件注解增删改查结果映射 查询 resultType使用 当数据库返回的结果集中的字段和实体类中的属性名一一对应时, resultType可以自动将结果封装到实体中 r…...
Shell入门(保姆级教学)
Shell是一种命令行解释器,也是一种脚本语言,广泛应用于Unix和类Unix系统中,例如Linux。它是用户与操作系统内核交互的桥梁,通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程,涵盖基…...
【JDK11和JDK8并行与切换】
一、JDK11安装 1、下载jdk11,点击.exe安装在:C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …...
vue大数据量列表渲染性能优化:虚拟滚动原理
前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下,我们讲了两种实现方式来提高渲染性能:前端分页和节点数据懒加载。 前端分页小节:Vue3扁平化Tree组件的前端分页实现 节点数据懒加载小节:Element Tree Plu…...
昇思25天学习打卡营第1天|快速入门
目录 昇思MindSpore介绍MindSpore的API来快速实现一个简单的深度学习模型通过资料更深入的了解昇思MindSpore 昇思MindSpore介绍 今天有幸学习了昇思MindSpore,让我们来简单的了解一下它 昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行…...
LinkedList 实现 LRU 缓存
LRU(Least Recently Used,最近最少使用)缓存是一种缓存淘汰策略,用于在缓存满时淘汰最久未使用的元素。 关键: 缓存选什么结构? 怎么实现访问顺序? import java.util.*;public class LRUCac…...
ubuntu安装workon
pip install virtualenvpip install virtualenvwrapper配置virtualenvwrapper。在你的shell配置文件(比如.bashrc,.bash_profile或.zshrc)中添加以下内容:export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/…...
(面试必看!)锁策略
文章导读 引言考点一、重量级锁 VS 轻量级锁1、定义与原理2、主要区别3、适用场景 考点二、乐观锁 VS 悲观锁1、悲观锁(Pessimistic Locking)2、乐观锁(Optimistic Locking)3、总结 考点三、读写锁1、读写锁的特性2、读写锁的实现…...
RAGflow:开源AI框架的创新与应用
在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执…...
AI的学习明确路径
1.不要一开始学习数学。 首先,学习python的语法和工具包。 python的工具包有:numpy,pandas,matlap,sciklt-learn. 然后,学习机械学习算法,学习1.树模型,随机森林 。 2.神经网络。 上kaggle中,找人家的经…...
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间 本章将分享缺省参数与函数重载相关知识,为了更加深入学习C打下了坚实的基础。本章重点在于缺省参数与函数重载使用前提与注意事项 🌈个人主页:是店小二呀 …...
mysql排查死锁的几个查询sql
SHOW PROCESSLIST; select * from information_schema.INNODB_TRX; select * from information_schema.INNODB_LOCKS; select * from information_schema.INNODB_LOCK_WAITS;...
快速部署私有化大模型 毕昇(使用docker-compose方式)
docker安装 1. # Linux系统安装docker,以CentOS/RHEL为例,其他操作系统请参考docker官方安装方法 # 如果已经安装过docker 期望重装,先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \d…...
B端:导航条就框架提供的默认样式吗?非也,看过来。
导航条不一定必须使用框架提供的默认样式,你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件,你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们,可以让设…...
【Instagram内容工业化生产】:ChatGPT + Canva + Notion三件套实战手册(含私有化部署Prompt库下载权限)
更多请点击: https://intelliparadigm.com 第一章:Instagram内容工业化生产的底层逻辑与范式迁移 Instagram内容工业化生产已从个体化、灵感驱动的创作模式,转向数据闭环、模块化协同与AI增强的系统工程。其底层逻辑根植于三重耦合ÿ…...
云原生监控一体化实践:从零部署mco实现指标、日志、追踪统一管理
1. 项目概述:一个面向现代容器化应用的开源监控解决方案最近在梳理团队的技术栈,发现随着微服务和Kubernetes的普及,传统的监控体系越来越力不从心。我们需要的不仅仅是对主机和进程的监控,更需要能深入理解容器、Pod、Service以及…...
Claude Code 多项目 API 配置管理实践
背景 Claude Code 的项目级配置文件 .claude/settings.json 中包含 API 提供商相关的环境变量。当同时维护多个项目,每个项目使用不同的 API 提供商(Anthropic 直连、OpenRouter 代理、自建转发等)时,每次切换项目都需要手动修改…...
Anthropic新模型Mythos号称擅查漏洞,扫描curl代码却仅确认1个低危问题
Mythos高调亮相,扫描结果却令人意外 近期,Anthropic推出的AI安全分析模型Mythos引发广泛关注,该公司宣称其在发现源代码安全漏洞方面表现出色,甚至因此暂缓公开发布。然而,当Mythos扫描全球最广泛使用的开源命令行HTTP…...
如何做谷歌SEO排名优化?搞定高质量外链的4种高成功率技巧
很多刚接触谷歌SEO的朋友发现,自己的网站内容写了不少,可排名始终在搜索结果的五六页开外晃悠。排除掉网站技术层面的小毛病,最让大家头疼的往往就是外链。你可以把外链看作是其他网站给你的“信任投票”,如果投给你的都是些街边的…...
技术生态依赖的实质与破局:从Android到自主可控的实践路径
1. 项目背景与核心议题解析最近在整理行业资料时,翻到一篇2013年的旧文,讨论的是当时中国工信部对国内移动产业过度依赖Android系统的担忧。虽然时过境迁,但文中提到的“技术自主可控”与“全球生态融入”之间的张力,在今天看来依…...
植物大战僵尸杂交版下载2026最新版更新v3.16及版本介绍分享(附下载链接)
作为一名长期沉迷植物大战僵尸改版的玩家,我近期完整体验了杂交版全新V3.16版本,从植物、关卡到平台适配,逐一实测验证。整体而言,这是一次诚意满满的更新,既有新鲜玩法的创新,又兼顾了不同玩家的需求&…...
win10打印机不能共享报0x0000011b/0x00000709修复工具合集分享 ,亲测解决Windows打印机共享报错问题
先说说我的情况。公司大概十几个人,两台共享打印机,一台接在Win10的台式机上,一台接在Win11的笔记本上。本来用着一直正常,去年开始,陆陆续续有同事反映连不上打印机。 最常见的报错就是0x00000709,还有0x…...
.NET 10 + CQRS + MediatR 一个跨平台文档管理系统
前言基于 .NET 10 打造的跨平台文档管理系统,才真正感受到了什么叫"专业级"的开源力量。它不仅仅是一个简单的文件存储工具,更是一个集成了 CQRS 架构、实时通信、版本控制等高级特性的现代化应用示例。项目介绍一款标准的前后端分离项目&…...
GitHub 代码提交常见问题及解决指南
摘要本文聚焦 GitHub 代码提交流程,围绕本地文件上传、远程仓库关联、分支推送等核心操作,梳理常见报错(如可疑所有权、分支不匹配、协议不支持等),解析错误成因并提供分步解决方法,覆盖 Git 命令执行、仓库…...
