第八章 泛型程序设计

简介: 为什么要使用泛型泛型的魅力是使程序有更好的安全性和可读性泛型类型限定使用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的同名方法冲突.
相关文章
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv8改进 | 2023注意力篇 | MSDA多尺度空洞注意力(附多位置添加教程)
YOLOv8改进 | 2023注意力篇 | MSDA多尺度空洞注意力(附多位置添加教程)
1027 0
|
7月前
|
存储 安全 Java
如何在 Spring Web 应用程序中使用 @SessionScope 和 @RequestScope
Spring框架中的`@SessionScope`和`@RequestScope`注解用于管理Web应用中的状态。`@SessionScope`绑定HTTP会话生命周期,适用于用户特定数据,如购物车;`@RequestScope`限定于单个请求,适合无状态、线程安全的操作,如日志记录。合理选择作用域能提升应用性能与可维护性。
309 1
|
存储 人工智能 开发框架
蚂蚁集团开源项目 DB-GPT 和 VSAG 惊艳亮相,引领 AI 数据革命!
9月5日,在2024 Inclusion·外滩大会“从DATA for AI到AI for DATA”见解论坛上,由蚂蚁集团发起的,旨在提高数据库与大模型应用开发效率的“星辰智能社区”新发布了两个项目:AI原生数据应用开发框架DB-GPT新版本与向量索引库VSAG。
|
人工智能 前端开发 搜索推荐
研发智能化新篇章:通义灵码企业级方案与实践
《研发智能化新篇章:通义灵码企业级方案与实践》简介: 本文探讨了通义灵码在提升企业研发效能方面的核心影响和实际应用。首先分析了AIGC(人工智能生成内容)如何从个体效率、协同效率和持续化三个维度提升企业生产力。接着,通过亚信科技的实际案例,展示了其在不同场景下的智能化实践,包括智能编程助手的选型、部署及效果评估。最后,展望了未来研发智能化的发展方向,提出构建覆盖软件开发全流程的智能体工具集,以进一步降低使用门槛并提升整体效率。文中强调了通义灵码在代码补全、知识问答等方面的应用成效,并指出了企业在落地过程中面临的挑战及应对策略。
694 1
|
安全 API 网络安全
API接口安全加固:应对黑客攻击的实战指南
**API安全摘要:** API成为黑客目标,攻击类型包括未授权访问、CSRF、DDoS、数据泄露和注入攻击。防御策略包括使用OAuth 2.0和JWT进行认证授权,防止CSRF攻击,限制请求速率,避免数据泄露,以及实施注入攻击防护。开发者应定期更新安全措施,确保API安全性。示例代码展示了Node.js中JWT认证的实现。
665 0
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
存储 编解码 开发框架
【C++ 多态 】了解 C++ 中的类型擦除和虚拟函数调用
【C++ 多态 】了解 C++ 中的类型擦除和虚拟函数调用
487 1
|
JavaScript 前端开发 编译器
Vue生成二维码
实现输入内容后点击回车或生成按钮,生成二维码,扫描后是我们在输入框的值.
336 0
Vue生成二维码
|
缓存 黑灰产治理
Autojs4.1.0实战教程---抖音极速版清理缓存
Autojs4.1.0实战教程---抖音极速版清理缓存
413 0
下一篇
开通oss服务