当前位置: 首页 > news >正文

Java基础 - 泛型(基本概念)

文章目录

  • 基本概念
    • 参数化类型
    • 类型安全和编译时检查
  • 为什么需要泛型?
    • 解决类型安全问题
    • 避免重复代码
    • 提高可读性和维护性

泛型(Generics)是编程语言中一种支持参数化类型的特性,允许在定义类、接口、方法时使用类型参数(Type Parameters),而在使用时指定具体的类型。泛型的核心目标是提高代码的 类型安全性、可重用性 和 可读性。

基本概念

参数化类型

  • 定义时不确定类型:在编写类、接口或方法时使用类型占位符(如 <T>),实际使用时再传入具体类型(如 String、Integer)。
  • 示例:
public class Box<T> {private T content;public void setContent(T content) { this.content = content; }public T getContent() { return content; }
}
// 使用
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello"); // 只能存放 String

类型安全和编译时检查

编译器可以检查参数类型是否正确,并在编译时而不是运行时捕获类型错误。

为什么需要泛型?

解决类型安全问题

在泛型出现之前,Java 集合类(如 ArrayList、HashMap)默认使用 Object 类型存储元素。这导致两个问题:

  • 强制类型转换:从集合中取出元素时需要显式转换类型。
  • 运行时类型错误风险:如果类型不一致,会抛出ClassCastException

示例:没有泛型的代码

List list = new ArrayList();
list.add("Hello");
list.add(10); // 编译通过(这里的 10 会被自动装箱为 Integer,但类型不一致会埋下隐患)// 取出元素时可能出错
String str = (String) list.get(1); // 运行时抛出 ClassCastException

通过泛型改进后:

List<String> list = new ArrayList<>();
list.add("Hello");
list.add(10); // 编译时就会报错!直接阻止非法操作
String str = list.get(0); // 无需强制类型转换

避免重复代码

在没有泛型时,如果要支持不同类型,需要为每种类型编写相似的代码(如分别实现 IntegerBoxStringBox)。

泛型的代码复用:

// 一个泛型类支持所有类型
Box<Integer> intBox = new Box<>();
Box<String> strBox = new Box<>();

提高可读性和维护性

泛型让代码的意图更明确,例如 Map<String, Integer> 清楚地表示“键是String,值是Integer”。

  • 清晰的类型约束:直接声明数据类型,避免混乱的类型转换。
  • 自解释性:代码能直接表达其设计的通用性。

相关文章:

Java基础 - 泛型(基本概念)

文章目录 基本概念参数化类型类型安全和编译时检查 为什么需要泛型&#xff1f;解决类型安全问题避免重复代码提高可读性和维护性 泛型&#xff08;Generics&#xff09;是编程语言中一种支持参数化类型的特性&#xff0c;允许在定义类、接口、方法时使用类型参数&#xff08;T…...

面试之《前端信息加密》

前端代码是直接暴漏给用户的&#xff0c;请求的接口也可以通过控制台network看到参数&#xff0c;这是不够安全的&#xff0c;如果遇到坏人想要破坏&#xff0c;可以直接修改参数&#xff0c;或者频繁访问导致系统崩溃&#xff0c;或数据毁坏。 所以信息加密在某些场合就变得非…...

【含文档+PPT+源码】基于微信小程序的小区物业收费管理系统

项目视频介绍&#xff1a; 毕业作品基于微信小程序的小区物业收费管理系统 课程简介&#xff1a; 本课程演示的是一款基于微信小程序的小区物业收费管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目…...

KDD 2025 顶会最新力作,多变量时间序列预测登顶!

在多变量时间序列预测领域&#xff0c;如何高效捕捉时间分布变化和通道间复杂关系是两大核心挑战。传统方法往往难以同时处理时间模式的异质性和通道间的噪声影响。近期&#xff0c;基于时频结合的方法在这一领域取得了显著进展。本文总结了两篇创新性论文&#xff0c;分别从时…...

for循环的优化方式、循环的种类、使用及平替方案。

本篇文章主要围绕for循环,来讲解循环处理数据中常见的六种方式及其特点,性能。通过本篇文章你可以快速了解循环的概念,以及循环在实际使用过程中的调优方案。 作者:任聪聪 日期:2025年4月11日 一、循环的种类 1.1 默认有以下类型 原始 for 循环 for(i = 0;i<10;i++){…...

OpenFeign 的实现原理详解

前言 OpenFeign 是一个声明式的 HTTP 客户端&#xff0c;它简化了服务间的 HTTP 调用。通过简单的注解和接口定义&#xff0c;开发者可以轻松调用远程服务&#xff0c;而无需手动编写复杂的 HTTP 请求代码。本文将深入探讨 OpenFeign 的实现原理&#xff0c;并结合源码分析其核…...

const关键字理解

const关键字主要的作用是告诉编译器这个东西是个常量&#xff0c;不可被修改。 或者是用来和指针玩一些奇奇怪怪的东西&#xff0c;这玩意面试八股文常青树。 const int* p&#xff1a;//表示指针指向的内容不能更改&#xff0c;指针可以更改。 int* const p: //表示指针不能…...

操作系统 4.3-生磁盘的使用

磁盘的物理组成 盘面&#xff1a; 磁盘由多个盘面组成&#xff0c;每个盘面上都有数据存储的区域。 磁道&#xff1a; 每个盘面上都有若干个同心圆&#xff0c;这些同心圆称为磁道。磁道是数据存储的路径。 扇区&#xff1a; 磁道被进一步划分为若干个扇区&#xff0c;扇区…...

Uniapp Vue 实现当前日期到给定日期的倒计时组件开发

应用场景与需求分析 在移动端应用开发中&#xff0c;倒计时功能是常见的交互需求&#xff0c;例如限时促销活动、订单超时提醒、考试倒计时等场景。本文将基于 Uniapp 框架&#xff0c;实现一个从当前日期到给定日期的倒计时组件&#xff0c;支持显示 HH:mm:ss 格式的剩余时间…...

3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换

3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换 3dmax标准材质/vr/cr材质贴图转PBR材质贴图插件,支持多维子材质转换...

操作系统 3.3-多级页表和快表

分页的问题 这张幻灯片讨论了操作系统中内存管理的一个核心问题&#xff1a;页大小与页表大小之间的权衡。 页&#xff08;Page&#xff09;是内存管理中的一个基本概念&#xff0c;指的是将虚拟内存分割成固定大小的块&#xff0c;以便于管理和访问。页的大小直接影响内存空间…...

Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)

阿里云的KMS&#xff08;Key Management Service&#xff09;也是一种托管式密钥管理服务&#xff0c;帮助用户安全地创建、控制和使用密钥&#xff0c;保护敏感数据。通过使用KSM&#xff0c;您可以专注于构建和优化应用程序&#xff0c;而不必担心密钥管理的复杂性。 1、主要…...

游戏引擎学习第218天

构建并运行&#xff0c;注意一下在调试系统关闭前人物的移动速度 现在我准备开始构建项目。如果我没记错的话&#xff0c;我们之前关闭了调试系统&#xff0c;主要是为了避免大家在运行过程中遇到问题。现在调试系统没有开启&#xff0c;一切运行得很顺利&#xff0c;看到那个…...

城电科技 | 光伏太阳花:碳减排路上的璀璨新光光伏智慧花

当谈及 “碳减排” 与 “碳中和”&#xff0c;你脑海中率先浮现的是什么&#xff1f;想必很多人都会想到太阳能发电。太阳能光伏&#xff0c;作为人类取之不尽、用之不竭的绿色清洁能源&#xff0c;具备充分的清洁性、高度的安全性以及相对的广泛性。正因如此&#xff0c;在探讨…...

AI领域再突破,永洪科技荣获“2025人工智能+创新案例”奖

在2025年的今天&#xff0c;人工智能已从技术概念全面渗透至产业核心。中国作为全球AI技术应用的前沿阵地&#xff0c;正通过“人工智能”行动加速推进技术与实体经济深度融合。 这一背景下&#xff0c;永洪科技凭借其“国内某头部ICT人力资源板块GenAI项目”荣获“2025全国企业…...

大模型day1 - 什么是GPT

什么是GPT 全称 Generative Pre-trained Transformer 是一种基于 Transformer 架构的大规模 预训练 语言模型&#xff0c;由OpenAI研发&#xff0c;但GPT仅仅只是借鉴了Transformer 中 Decoder 的部分&#xff0c;并且做了升级 Transformer 架构 Transformer架构 是一种用于…...

飞凌嵌入式T527核心板正式发布OpenHarmony4.1系统,实现从芯片架构到操作系统的全链路国产化

飞凌嵌入式FET527N-C核心板正式发布OpenHarmony4.1系统&#xff0c;实现了从芯片架构到操作系统的全链路国产化。该产品具备灵活可编程、高效能运算、低成本控制等多重优势&#xff0c;通过多核异构设计同步支持边缘智能计算与精准实时控制&#xff0c;能够满足智能制造、能源管…...

机动车号牌管理系统设计与实现(代码+数据库+LW)

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对机动车号牌信息管理的提升&…...

测试模板1

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...

小试牛刀-抽奖程序

编写抽奖程序 需求&#xff1a;设计一个抽奖程序&#xff0c;点击抽奖按钮随机抽取一个名字作为中奖者 目标&#xff1a;了解项目结构&#xff0c;简单UI布局&#xff0c;属性方法、事件方法&#xff0c;程序运行及调试 界面原型 ​ 待抽奖&#xff1a; 点击抽奖按钮&#x…...

Foundry框架在FISCO BCOS区块链中的高级应用与实战技巧

引言:从入门到精通的进阶之路 在看过我发布的《FISCO BCOS区块链智能合约测试利器:Foundry框架从入门到实战》基础上,我们可以进一步深入探索Foundry框架在FISCO BCOS生态中的高级应用场景。Foundry作为一款强大的区块链开发工具集,其功能远不止于基础测试,它还能为FISCO…...

反转链表系列

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int …...

算力租赁:数字经济时代的 “电力革命”—— 从资源租赁到创新生态的范式重构

引言&#xff1a;当算力成为新 “石油”&#xff0c;租赁模式如何重塑商业未来&#xff1f; 在数字经济浪潮中&#xff0c;算力早已超越传统硬件范畴&#xff0c;成为驱动企业创新的核心生产要素。据 IDC 预测&#xff0c;全球数据总量将在 2025 年突破 175 ZB&#xff0c;而人…...

Go:基本数据

文章目录 整数浮点数复数布尔值字符串字符串字面量UnicodeUTF - 8字符串和字节 slice字符串和数字的相互转换 常量常量生成器 iota无类型常量 整数 分类 Go 的整数类型按大小分有 8 位、16 位、32 位、64 位 &#xff0c;同时有符号整数包括int8、int16、int32、int64 &#…...

金融行业软件介绍

金融&#xff0c;本质为货币资金的融通&#xff0c;是经济活动中至关重要的领域。它围绕货币、信用、利率等核心要素运转&#xff0c;借助银行、证券机构、保险机构等众多主体&#xff0c;在货币市场与资本市场中实现资金的调配与流转&#xff0c;具有优化资源配置、分散风险及…...

Python的那些事第四十九篇:基于Python的智能客服系统设计与实现

基于Python的智能客服系统设计与实现 摘要 随着人工智能技术的飞速发展,智能客服系统逐渐成为企业提升客户服务质量和效率的关键工具。本文详细介绍了基于Python的智能客服系统的设计与实现方案,涵盖了系统架构、核心功能、技术选型及优化建议,旨在为企业构建高效、智能的客…...

vscode报错:unins000.exe 尝试在目标目录创建文件时发生一个错误

打开vscode&#xff0c;报错 这个错误提示表明在卸载或安装 Visual Studio Code 时&#xff0c;系统拒绝访问目标目录中的文件 unins000.exe。以下是解决此问题的有效方法&#xff1a; 检查文件权限 找到文件所在目录&#xff08;如 D:\software\Microsoft VS Code&#xff…...

当气象水文遇见R语言——破解时空数据的“达芬奇密码“

在气象水文科学领域&#xff0c;数据从来不只是简单的数字阵列。台风路径的时空跳跃、流域径流的非线性涨落、气候要素的混沌演变&#xff0c;这些充满不确定性的自然现象转化为数据时&#xff0c;呈现出多维时空交织的复杂图景。研究人员常常要在TB级遥感数据中捕捉毫米级降水…...

LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】

LEARNING DYNAMICS OF LLM FINETUNING 一句话总结 作者将LLM的学习动力机制拆解成AKG三项&#xff0c;并分别观察了SFT和DPO训练过程中​​正梯度信号​​和​​负梯度信号​​的变化及其带来的影响&#xff0c;并得到以下结论&#xff1a; ​​SFT通过梯度相似性间接提升无关…...

【射频仿真学习笔记】变压器参数的Mathematica计算以及ADS仿真建模

变压器模型理论分析 对于任意的无源电路或者等效电路&#xff0c;当画完原理图后&#xff0c;能否认为已经知道其中的两个节点&#xff1f;vin和vout之间的明确解析解 是否存在一个通用的算法&#xff0c;将这里的所有元素都变成了符号&#xff0c;使得这个算法本身就是一个函…...

改善 Maven 的依赖性

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项&#xff1a; 还有另一个用例&#xff0c; mvn dependency:analyze 它可…...

循环神经网络 - LSTM 网络的各种变体

前面的博文中&#xff0c;我们了解和学习了长短期记忆网络&#xff0c;本文我们来学习LSTM 网络的各种变体。 目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息&#xff0c;输入多少新信息&#xff0c;以及输出多少信息.我们可以对门控机制进行改进并获…...

LangGraph 概述

LangGraph 介绍 LangGraph 是 LangChain 框架的扩展&#xff0c;专为创建基于大型语言模型&#xff08;LLMs&#xff09;的有状态、多角色应用而设计。它提供了一个灵活的架构&#xff0c;用于构建复杂的多步骤 LLM 应用&#xff0c;其中状态管理和流程控制至关重要。 为什么…...

Linux系统06---信号

目录 信号 1.1 进程间通信方式 1.2 信号的概念 1.3 查看信号 1.4 信号的产生 1.5 信号的处理 信号的 API 函数 2.1 函数名&#xff1a;kill() 2.2 函数名&#xff1a;raise() 2.3 函数名&#xff1a;alarm() 2.4 函数名&#xff1a;pause() 2.5…...

Java 程序调试与生产问题排查工具Arthas

好的&#xff0c;以下是修改后的博客内容&#xff0c;将公司信息替换为通用的占位符&#xff1a; 深入探索 Arthas&#xff1a;Java 程序调试与生产问题排查的利器 在 Java 开发中&#xff0c;调试和诊断问题往往是一个复杂且耗时的过程。Arthas&#xff08;Alibaba Java Dia…...

PH热榜 | 2025-04-11

1. Voicenotes Pages 标语&#xff1a;如果出版的感觉像是在和朋友聊天呢&#xff1f; 介绍&#xff1a;Voicenotes Pages 是一个极其简单的发布创意和故事的方式。它就像是一个简易的博客或播客&#xff0c;但更容易上手。你只需录制内容&#xff0c;点击发布&#xff0c;就…...

从三围学校项目看:中建海龙智能建造的崛起与突破

在建筑行业迈向智能化、数字化的浪潮里&#xff0c;中建海龙科技有限公司&#xff08;以下简称“中建海龙”&#xff09;从中脱颖而出&#xff0c;成为推动智能建造发展的重要力量。凭借深厚的技术积累、创新的理念以及先进的实践&#xff0c;中建海龙正引领着建筑行业的变革&a…...

aviator 自定义表达式

引入依赖 如果你使用的是 Maven 项目&#xff0c;在 pom.xml 中添加以下依赖&#xff1a; <dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>5.3.2</version> </dependency>…...

电商中的购物车(redis的hash类型操作)

购物车样式 ①、创建service-cart模块 spring:profiles:active: devserver:port: 8513 spring:application:name: service-cartcloud:nacos:discovery:server-addr: localhost:8848data:redis:host: localhostport: 6379启动类 SpringBootApplication(excludeDataSourceAutoC…...

Ubuntu 系统错误日志常见问题

一、Ubuntu 系统日志文件位置 1. 核心系统日志 日志文件用途说明/var/log/syslog所有系统级别的日志(包括内核、服务等)/var/log/kern.log内核相关的详细日志(如硬件驱动问题)/var/log/auth.log用户认证日志(SSH登录、sudo权限等)/var/log/dpkg.log软件包安装/卸载日志/…...

《Uniapp-Vue 3-TS 实战开发》TypeScript 泛型详解

泛型(Generics)是 TypeScript 中非常重要的特性,它允许我们创建可重用的组件,这些组件可以支持多种类型,而不会丢失类型安全性。 一、泛型基础 1. 基本概念 泛型允许我们在定义函数、接口或类时不预先指定具体类型,而是在使用时再指定类型。 // 不使用泛型 function …...

mysql 删除表等待

今天有个表加字段&#xff0c;语句是先删除&#xff0c;后重新建&#xff0c;表没有数据 &#xff0c;但是删除一个表的时候&#xff0c;语句drop table 提示超时 show processlist 后&#xff0c;等待类型是 Waiting for table metadata lock 取消重试几次后仍然是如此…...

如何深入理解protobuf

Protocol Buffers&#xff08;protobuf&#xff09;是一种轻便高效的结构化数据存储格式&#xff0c;用于数据序列化和反序列化&#xff0c;具有语言无关、平台无关、可扩展性强等特点&#xff0c;能有效提高数据存储和传输的效率。 一.协议的设计 我们在介绍protobuf之前我们…...

《分布式软总线牵手云服务,拓展应用新维度》

分布式软总线与云服务的融合&#xff0c;正掀起一场前所未有的变革&#xff0c;重塑着我们工作、生活和交互的方式。二者的结合&#xff0c;犹如天作之合&#xff0c;不仅打破了设备与数据之间的壁垒&#xff0c;更开启了一系列令人瞩目的全新应用场景。 分布式软总线&#xf…...

ReentrantLock 实现公平锁和非公平锁的原理!

&#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支持一下&#xff0c;感谢&#x1f917;&#xff01; &#x1f31f;了解 ThreadLocal请看&#xff1a; ThreadLocal有趣讲解&#xff0c;小白也能听懂&#xff…...

算法训练之动态规划(四)——简单多状态问题

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

【JavaScript】错误处理与调试

个人主页&#xff1a;Guiat 归属专栏&#xff1a;HTML CSS JavaScript 文章目录 1. JavaScript 错误处理基础1.1 错误类型1.2 try...catch 语句 2. 错误抛出与自定义错误2.1 throw 语句2.2 自定义错误类型 3. 异步错误处理3.1 Promise 错误处理3.2 async/await 错误处理 4. 调试…...

MySQL 管理与配置:查看端口、修改密码与数据存储位置

1.MySQL查看端口号 show global variables like port; 2.MySQL修改密码 grant all privileges on *.* to root% identified by 你的mysql密码 with grant option;flush privileges; 3.查询 MySQL 数据库的数据存储目录 MySQL 的所有数据库文件、表数据、索引、日志文件等都存…...

(四十二)Dart 中的接口与抽象类

Dart 中的接口与抽象类 Dart 的接口特性 在 Dart 中&#xff0c;接口的实现方式与 Java 有所不同。Dart 没有专门的 interface 关键字来定义接口&#xff0c;而是通过普通类或抽象类来实现接口的功能。以下是 Dart 接口的主要特点&#xff1a; 普通类或抽象类都可以作为接口 …...

Java习题:合并两个有序数组

文章目录 前言一、题目描述二、方法2.1 方法一2.2 方法二 前言 虽然这个题目很简单&#xff0c;但是在使用java语言实现的过程中&#xff0c;存在多种方法这是很有意思的一道题&#xff0c;所以小编在这里写下它的各种方法加深javase语法的学习。 提示&#xff1a;以下是本篇文…...