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

Java泛型

Java泛型的基本概念

泛型Java SE 5.0引入的特性,允许在定义类、接口或方法时使用类型参数。泛型的核心目的是提高代码的类型安全性和复用性,避免强制类型转换。

泛型的优势

类型安全:编译时检查类型,减少运行时错误。 代码复用:一套逻辑可适用于多种数据类型。 消除强制类型转换:减少代码冗余和潜在错误。

泛型类和接口

定义泛型类时,在类名后添加类型参数声明:

public class Box<T> { private T t; public void set(T t) { this.t = t; } public T get() { return t; } }

接口定义方式类似:

public interface List<T> { void add(T element); T get(int index); }

泛型方法

泛型方法可以在非泛型类中定义,方法声明中包含类型参数:

public <T> T genericMethod(T param) { return param; }

静态方法也可以使用泛型

public static <T> T staticGenericMethod(T param) { return param; }

类型通配符

使用?表示未知类型,常用于方法参数:

public void processList(List<?> list) { for (Object elem : list) { System.out.println(elem); } }

上界通配符限制类型范围:

public void processNumbers(List<? extends Number> list) { for (Number num : list) { System.out.println(num.doubleValue()); } }

下界通配符:

public void addNumbers(List<? super Integer> list) { list.add(new Integer(42)); }

泛型限制

不能创建泛型数组:

// 编译错误 List<String>[] arrayOfLists = new List<String>[10];

不能实例化类型参数:

// 编译错误 T obj = new T();

不能用于静态上下文:

public class GenericClass<T> { // 编译错误 private static T staticField; }

类型擦除

Java泛型在编译时进行类型检查,运行时擦除类型信息。编译后的代码不包含泛型类型参数,所有类型参数替换为它们的上界(未指定上界则替换为Object)。

实际应用示例

集合框架中的泛型:

List<String> strings = new ArrayList<>(); strings.add("Hello"); String s = strings.get(0); // 无需强制类型转换

比较接口中的泛型:

public interface Comparable<T> { int compareTo(T o); }

最佳实践

尽量使用泛型替代原始类型。 优先使用通配符增加API灵活性。 避免在类声明和静态上下文中混用泛型。 注意类型擦除带来的潜在问题。

http://www.jsqmd.com/news/461135/

相关文章:

  • springboot基于安卓Android的校园失物招领APP
  • 信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算2(知识详解:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)
  • springboot基于安卓校园外卖点餐系统 商家
  • 信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算3(案例实践:裴蜀定理)
  • springboot基于安卓的酒店客房预约管理APP
  • springboot安卓Android的快递物流管理系统
  • springboot安卓充电站冲充电桩预约APP视频
  • 读2025世界前沿技术发展报告08智能制造技术发展(上)
  • 打印机下划线打印不均匀的5个解决技巧
  • Flutter 三方库 flad_cli 的鸿蒙化适配指南 - 实现 Dart 工程的自适应模板扫描与脚手架自动化、支持端侧资源一键生成与代码架构规约校验实战
  • Flutter 三方库 ktc_dart 的鸿蒙化适配指南 - 连接 KTC 教育平台 API、实现课表同步、成绩查询与学生端核心功能
  • Flutter 三方库 hooks_runner 的鸿蒙化适配指南 - 实现声明式的生命周期 Hook 任务管理、支持端侧自动化脚本触发与执行流精准编排实战
  • Flutter 三方库 creator_core 的鸿蒙化适配指南 - 支持极简组件状态管理、反应式逻辑驱动与流式数据处理
  • claude code插件市场添加和使用
  • Matlab代码 基于DOA-Transformer-LSTM两模型回归预测一键对比(多输出单输出)
  • 【64】杂草数据集(有v5/v8模型)/YOLO杂草检测
  • I/O 多路复用
  • 移动机器人总装图
  • 1e1af3e8-900f-4e13-937e-e02fce56cf3e
  • 跨越词汇的鸿沟:NLTK 中不为人知的语义与语篇分析能力深度探索
  • 【全网最全】2026主流AI绘画比例大横评:DALL-E 3、Midjourney、Gemini与Claude的隐藏技巧
  • 企业级高校实习管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 紧随电车出海浪潮,外贸ERP助力车企实现精准协同与库存优化
  • Flutter 三方库 coverage_reporter 的鸿蒙化适配指南 - 实现具备 LCOV 自动分析与多格式统计的代码覆盖率报告引擎、支持端侧质量量化与 CI 流水线对齐实战
  • Flutter 三方库 gviz 的鸿蒙化适配指南 - 实现复杂的 Graphviz 拓扑图布局计算、支持 DOT 语言解析与自动化图谱生成
  • Flutter 三方库 jsonata_dart 的鸿蒙化适配指南 - 实现高性能的 JSON 数据查询与转换、支持 JSONata 表达式引擎与端侧复杂数据清洗
  • 放化疗口腔并发症治疗用药选速舒®,口腔护理更科学
  • Flutter 三方库 session 的鸿蒙化适配指南 - 实现具备 TTL 机制的端侧会话持久化、支持敏感凭证加密存储与全生命周期状态同步实战
  • 宁波极微纳-精选2026纳米材料厂家/纳米氧化物厂家,全域适配,赋能多业 - 栗子测评
  • Spring Cloud负载均衡组件到底是哪一个?