JAVA泛型的作用

1. 类型安全(Type Safety)

在泛型出现之前,集合类(如 ArrayListHashMap)只能存储 Object 类型元素,导致以下问题:

  • 问题‌:从集合中取出元素时,需手动强制类型转换,容易因类型不匹配导致运行时错误(如 ClassCastException)。
    // JDK 1.4 时代:非泛型示例
    List list = new ArrayList();
    list.add("Hello");
    Integer num = (Integer) list.get(0); // 编译通过,运行时报 ClassCastException
    

  • 泛型解决方案‌:
    通过指定集合存储的具体类型,编译器在编译期即可检查类型合法性,避免运行时错误。
    List<String> list = new ArrayList<>();
    list.add("Hello");
    String str = list.get(0); // 无需强制转换,且非法类型操作(如添加 Integer)会被编译器拦截
    


2. 消除强制类型转换

  • 问题‌:非泛型代码需要频繁进行类型转换,代码冗余且易错。
    List list = new ArrayList();
    list.add("Apple");
    String fruit = (String) list.get(0); // 必须强制转换
    

  • 泛型解决方案‌:
    泛型自动处理类型转换,代码更简洁,泛型擦除原理
    List<String> list = new ArrayList<>();
    list.add("Apple");
    String fruit = list.get(0); // 直接获取 String 类型
    


3. 代码复用与通用算法

  • 问题‌:非泛型代码需为不同类型重复实现相同逻辑。
    例如,排序方法需要为 IntegerString 等类型各写一个版本。
    public void sortIntegers(List integers) { /* 排序逻辑 */ }
    public void sortStrings(List strings) { /* 相同逻辑,仅类型不同 */ }
    

  • 泛型解决方案‌:
    泛型允许编写通用的类、接口和方法,支持多种类型复用同一逻辑。
    public <T extends Comparable<T>> void sort(List<T> list) {// 单一方法适用于所有 Comparable 类型
    }
    


4. 增强代码可读性与维护性

  • 问题‌:非泛型代码中集合的类型意图不明确,需通过注释或变量名猜测。
    List users = new ArrayList(); // 存储的是什么?User 对象?String?
    

  • 泛型解决方案‌:
    通过类型参数显式声明集合用途,代码自解释性更强。
    List<User> users = new ArrayList<>(); // 明确存储 User 对象
    


5. 解决原始类型(Raw Type)的缺陷

  • 问题‌:非泛型代码使用原始类型(如 List),编译器无法检测非法操作。
    List list = new ArrayList();
    list.add(123);
    list.add("abc"); // 允许混合类型,导致后续操作风险
    

  • 泛型解决方案‌:
    泛型强制约束集合元素的类型,避免非法插入。
    List<Integer> list = new ArrayList<>();
    list.add(123);
    list.add("abc"); // 编译器报错:类型不匹配
    


总结

泛型的引入主要解决以下问题:

  1. 类型安全‌:编译时类型检查,避免运行时 ClassCastException
  2. 消除强制转换‌:简化代码,减少冗余操作。
  3. 通用编程‌:支持编写复用性更高的代码(如通用集合和算法)。
  4. 代码清晰性‌:通过类型参数明确数据意图,提升可读性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文章防洗稿隐蔽混淆软件

如果你的文章经常被人洗稿搬运&#xff0c;那么这个小工具或许可以帮到你 基本原理: 在文章的每个字后面&#xff0c;加上一些随机的隐藏字符 人眼看不到&#xff0c;但是机器会读取到&#xff0c;如果别人是用AI工具来对你的文章进行洗稿&#xff0c;就会发现这是一堆乱码 你…

车载软件架构 --- AUTOSAR AP/CP中诊断的区别

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 周末洗了一个澡&#xff0c;换了一身衣服&#xff0c;出了门却不知道去哪儿&#xff0c;不知道去找谁&am…

百度OCR调用记录

根据说明&#xff0c;调用测试 设置注册的API Key和Secret Key 调用类&#xff08;官方文档中有&#xff09; 这里改传入路径&#xff1b; 测试问题 1.{"error_code":110,"error_msg":"Access token invalid or no longer valid"} 查到说是 …

19.哈希表的实现

1.哈希的概念 哈希(hash)⼜称散列&#xff0c;是⼀种组织数据的⽅式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系&#xff0c;查找时通过这个哈希函数计算出Key存储的位置&#xff0c;进⾏快速查找。 1.2.直接定址法…

网络编程之解除udp判断客户端是否断开

思路&#xff1a;每几秒发送一条不显示的信息&#xff0c;客户端断开则不再发送信息&#xff0c;超时则表示客户端断开连接。&#xff08;心跳包&#xff09; 服务器 #include <head.h>#define MAX_CLIENTS 100 // 最大支持100个客户端 #define TIMEOUT 5 // 5秒…

Java 大视界 -- Java 大数据在智能医疗远程会诊与专家协作中的技术支持(146)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

调用feapder作为子程序时setting.py文件不起作用

feaper 官方文档地址&#xff1a; 简介及安装 - feapder官方文档|feapder-document 问题&#xff1a; 在最近的开发中需要调用feapder作为主程序调用的子程序时发现自动入库时无法入库&#xff0c;通过查看日志信息发现连接数据库时被拒绝连接了&#xff0c;但是我的setting.p…

【STM32】SPI通信协议W25Q64Flash存储器芯片(学习笔记)

通信接口部分有介绍SPI&#xff1a;【STM32】USART串口协议&串口外设-学习笔记-CSDN博客 SPI通信协议 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线四根通信线&#xff1a;SCK&#xff08;Serial Clock&…

刘强东突然发声:不该用算法压榨最底层兄弟!东哥,真正的人民企业家

今天忙了一天&#xff0c;很累&#xff0c;准备睡觉的时候&#xff0c;看到网上盛传的刘强东的朋友圈&#xff0c;东哥又在朋友圈发文了。 说实话&#xff0c;看完之后&#xff0c;感动&#xff0c;真的感动。 尤其是当我看到这两句话的时候。 1、我们所学的知识、商业模式、技…

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…

C++ 语法之数组指针

一维数组&#xff1a; 如果我们定义了一个一维数组&#xff0c;那么这个数组名&#xff0c;就是指向第一个数组元素的地址&#xff0c;也即&#xff0c;是整个数组分配的内存空间的首地址。 比如 int a[3]; 定义了一个包含三个元素的数组。因为一个int占4个字节&#xff0c;那…

021-TCMalloc

TCMalloc 以下是对TCMalloc的技术调研报告&#xff0c;结合原理、代码实现、优化参数及性能对比的综合分析&#xff1a; 一、TCMalloc核心原理 架构分层 TCMalloc采用三级缓存结构&#xff0c;具体流程参考下图&#xff1a; ┌─────────────┐ ┌───…

华为网路设备学习-16 虚拟路由器冗余协议(VRRP)

VRRP是针对干线上三层网络设备&#xff08;如&#xff1a;路由器、防火墙等&#xff09;的网络虚拟化技术&#xff0c;提供冗余和状态监测等功能。确保在网络中的单点故障发生时&#xff0c;能够快速切换到备份设备&#xff0c;从而保证网络通信的连续性和可靠性。‌ VRRP通过…

【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5

文章目录 前言一、阔感体验&#xff0c;大有不同二、鸿蒙AI&#xff0c;大有智慧三、便携出行&#xff0c;大有不同四、首款全面搭载 HarmonyOS 5 的手机五、卓越性能&#xff0c;可靠安心六、红枫影像&#xff0c;大放光彩预热&#xff1a;鸿蒙电脑HarmonyOS 5 升级计划小结 前…

算法题(103):数独

审题&#xff1a; 本题需要我们找出数独的解&#xff0c;并打印出来 时间复杂度分析&#xff1a; 本题是9*9的数独格子&#xff0c;所以数据量小于25&#xff0c;可以使用2^n的算法 思路&#xff1a; 方法一&#xff1a;深度优先搜索 首先确定搜索及插入策略&#xff1a; 我们采…

sougou AI close

sougou AI close 全局禁用《AI 汪仔》 现在丝滑流畅很多了

二分查找上下界问题的思考

背景 最近在做力扣hot100中的二分查找题目时&#xff0c;发现很多题目都用到了二分查找的变种问题&#xff0c;即二分查找上下界问题&#xff0c;例如以下题目&#xff1a; 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查找元素的第一个和最后一个位置 它们不同于查找…

springboot实现调用百度ocr实现身份识别+二要素校验

一、技术选型 OCR服务&#xff1a;推荐使用百度AI 二、实现 1.注册一个服务 百度智能云控制台https://console.bce.baidu.com/ai-engine/ocr/overview/index?_1742309417611 填写完之后可以获取到app-id、apiKey、SecretKey这三个后面文件配置会用到 2、导入依赖 <!-- …

【数据分享】2000—2024年我国乡镇的逐月归一化植被指数(NDVI)数据(Shp/Excel格式)

之前我们分享过2000—2024年我国省市县三级逐月归一化植被指数&#xff08;NDVI&#xff09;数据&#xff0c;该数据是基于NASA定期发布的MOD13A3数据集中的月度NDVI栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;计算得出。很多小伙伴拿到数据后反馈是否可以处理出…

背包问题——动态规划的经典问题包括01背包问题和完全背包问题

01背包问题&#xff1a;给你多个物品每个物品只能选一次&#xff0c;要你在不超过背包容积&#xff08;或者恰好等于&#xff09;的情况下选择装价值最大的组合。如果没有动态规划的基础其实是很难理解这个问题的&#xff0c;所以看这篇文章之前先去学习一下动态规划的基本思想…