第八章 泛型程序设计

简介: 为什么要使用泛型泛型的魅力是使程序有更好的安全性和可读性泛型类型限定使用extends关键字限定泛型必须是某个接口的子类, 可以有多个类型如 T extends Comparable & Serializable, 规定限定中至多有一个类, 且这个类必须出现在列表的第一个位置.

为什么要使用泛型

  • 泛型的魅力是使程序有更好的安全性和可读性

泛型类型限定

  • 使用extends关键字限定泛型必须是某个接口的子类, 可以有多个类型如 T extends Comparable & Serializable, 规定限定中至多有一个类, 且这个类必须出现在列表的第一个位置.
  • 方法的类型擦除会生成仅返回值类型不同的方法, 在java代码中这是不允许的, 但编译器可以处理这种情况.
  • 1.泛型发生在编译阶段;2.所有的类型参数都用他们的限定类型替换,没有则替换为Object;3.桥方法被合成来保持多态;4.为保证安全性必要时插入强制类型转换

约束和局限

  • 所有的约束均由类型擦除引起
  1. 不能用基本类型
  2. 运行时的类型查询只适用于原始类型, 如使用instanceof是会编译错误, getCalss()时不同泛型参数返回的Class对象是一样的
  3. 不能创建参数化类型的数组, 但是可以声明, 如MyClass<String> array;是可以的. 使用泛型的Arraylist吧.
  4. 对于可变数量的参数列表, 它的实质是个数组, 所以也受上述约束, 但不会有编译错误, 只会得到一个警告; 除了用@SuppressWarning("unchecked")消除警告, java7提供了@SafeVarargs标注来标注泛型方法.
  5. 不能实例化类型变量, Java8之后最好的解决方式是让调用者提供一个构造器表达式, 使用到了函数式接口Supplier<T>;Java8之前使用反射
  6. 同样不能构造泛型数组
  7. 泛型类的静态上下文类型变量无效
  8. 不能抛出或捕获泛型类的实例, 这意味着无法定义Excption的子类
  9. 可以消除对受查异常的检查,如@SuppressWarning("unchecked")
  10. 注意擦除后的冲突, 如泛型的equals(T t)方法将于擦除后的Object的同名方法冲突.
相关文章
|
缓存 资源调度 运维
从零到一搭建私有NPM服务器
从零到一搭建私有NPM服务器
2943 0
从零到一搭建私有NPM服务器
|
11月前
|
数据采集 自然语言处理 数据可视化
时序数据分析:Python爬取新浪财经频道新闻并绘制趋势图
时序数据分析:Python爬取新浪财经频道新闻并绘制趋势图
|
人工智能 监控 JavaScript
从零开始学MCP(4) | 连接 MCP 客户端:从聊天机器人到智能体
本指南详解2025年如何打通Claude、Cursor及自定义客户端,构建企业级AI智能体系统。涵盖MCP双向通信架构、主流客户端连接配置、智能体系统实战、安全认证、性能优化及部署方案,助你掌握下一代AI应用核心技术。
|
人工智能 并行计算 测试技术
从商业海报到二次元插画多风格通吃!HiDream-I1:智象未来开源文生图模型,17亿参数秒出艺术大作
HiDream-I1是智象未来团队推出的开源图像生成模型,采用扩散模型技术和混合专家架构,在图像质量、提示词遵循能力等方面表现优异,支持多种风格生成。
1473 2
从商业海报到二次元插画多风格通吃!HiDream-I1:智象未来开源文生图模型,17亿参数秒出艺术大作
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
北极星指标是什么
北极星指标是什么
2113 0
|
机器学习/深度学习 数据处理
NeurIPS 2024:消除多对多问题,清华提出大规模细粒度视频片段标注新范式VERIFIED
清华大学研究团队提出VERIFIED,一种基于大型语言模型和多模态模型的大规模细粒度视频片段标注新方法。VERIFIED通过静态与动态增强字幕及细粒度感知噪声评估器,有效解决了视频语义理解中的多对多问题、细粒度理解和大规模数据标注挑战。实验结果显示,VERIFIED能生成高质量的细粒度视频片段标注,显著提升了视频理解的精度和效率。
716 2
|
存储 JSON 监控
微服务链路追踪原理,一文搞懂!
本文重点讲解微服务链路追踪(Microservices Distributed Tracing),介绍其原理、架构及工作流程。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
微服务链路追踪原理,一文搞懂!
|
机器学习/深度学习 人工智能 SDN
《重塑数据中心网络架构,迎接人工智能算力浪潮》
在人工智能快速发展的背景下,数据中心作为算力核心,其网络架构优化至关重要。传统三层架构因延迟高、扩展性差已难以满足AI需求。叶脊架构通过扁平化设计减少延迟并提升扩展性,高速网络技术(如100Gbps/400Gbps以太网)提供更大带宽,SDN与网络虚拟化实现灵活资源分配,优化流量管理进一步提高效率。未来,量子通信和边缘计算等技术将推动数据中心网络持续演进,助力AI算力提升,为社会带来更多变革。
945 9
|
数据采集 自然语言处理 测试技术
CodeFuse-13B: 预训练多语言代码大模型
该论文针对蚂蚁集团的现实应用场景,详细介绍了CodeFuse-13B预训练模型的数据准备和训练过程,揭秘了CodeFuse是如何成为一款能够同时处理英文和中文提示的高效预训练代码大型语言模型(LLM)。论文还对CodeFuse在代码生成、翻译、注释和测试用例生成等应用场景中的性能进行了评估。CodeFuse-13B在蚂蚁集团内广
1045 2