完美演示Java泛型的上下界限(extends 与 super)

ops/2024/10/11 13:28:15/

泛型上下限的基本概念

  1. extends

    • 用于指定泛型的上限,即泛型类型必须是指定类型的子类型或者是指定类型本身。
    • 通常用于限定泛型的类型参数,保证泛型类型不超过指定的类型。
  2. super

    • 用于指定泛型的下限,即泛型类型必须是指定类型的父类型或者是指定类型本身。
    • 通常用于限定泛型的类型参数,保证泛型类型不会低于指定的类型。

详细说明

1. extends 关键字
  • 定义: T extends Bound 表示泛型 TBound 类型或其子类型。可以指定多个上限,用 & 分隔,但其中一个上限必须是 Object

  • 示例:

class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }// 定义一个方法,该方法可以接收Dog和Cat对象
public <T extends Animal> void addAnimal(T animal) {// 这里你可以使用animal作为Animal类型
}// 使用示例
addAnimal(new Dog()); // 合法
addAnimal(new Cat()); // 合法
  • 作用: 使用extends来限制泛型类型,使其能够接受Animal及其子类。这确保了在调用addAnimal方法时,传入的对象是Animal的实例或其子类的实例。

2. super 关键字
  • 定义: T super Bound 表示泛型 TBound 类型或其父类型。可以用来指定类型的最小界限,保证泛型类型至少是Bound类型。

  • 示例:

class Animal { }
class Dog extends Animal { }
class Cat extends Animal { }// 定义一个方法,该方法可以接收Animal及其父类对象
public void addAnimal(List<? super Dog> list) {list.add(new Dog()); // 合法// list.add(new Cat()); // 编译错误,因为Cat不是Dog的超类
}// 使用示例
List<Animal> animalList = new ArrayList<>();
addAnimal(animalList); // 合法
  • 作用: 使用super来确保集合的元素类型至少是Dog的超类,这样可以安全地添加Dog对象到集合中。注意,不能添加Dog以外的其他子类型,比如Cat

总结

  • extends 限定了泛型类型必须是某个指定类型的子类或该类型本身。用于读操作,确保泛型类型符合上界的要求。

  • super 限定了泛型类型必须是某个指定类型的父类或该类型本身。用于写操作,确保泛型类型不低于下界的要求。

这两种用法帮助你在编写泛型代码时能够更好地控制类型的范围,确保代码的类型安全和灵活性。


http://www.ppmy.cn/ops/96000.html

相关文章

华为S3700交换机配置VLAN的方法​

1.VLAN的详细介绍 VLAN(Virtual Local Area Network)即虚拟局域网,是一种将一个物理的局域网在逻辑上划分成多个广播域的技术。 1.1基本概念 1)作用: 隔离广播域:通过将网络划分为不同的 VLAN,广播帧只会在同一 VLAN 内传播,而不会扩散到其他 VLAN 中,从而有效…

字符串值提取工具-08-java 执行 xml 解析, xpath

值提取系列 字符串值提取工具-01-概览 字符串值提取工具-02-java 调用 js 字符串值提取工具-03-java 调用 groovy 字符串值提取工具-04-java 调用 java? Janino 编译工具 字符串值提取工具-05-java 调用 shell 字符串值提取工具-06-java 调用 python 字符串值提取工具-…

Go Kafka 操作详解

Go Kafka 操作详解 引言 Apache Kafka 是一个分布式流处理平台&#xff0c;广泛应用于构建实时数据管道和流应用程序。在 Go 语言中&#xff0c;使用 github.com/IBM/sarama 库可以方便地与 Kafka 进行交互。本文将详细介绍如何使用 Sarama 库在 Go 中实现 Kafka 的生产者和消…

ComfyUI中,“鼠标忽然不太好用了”的解决方案---新版本偶遇bug

&#x1f387;背景 这是个很奇怪的界面bug。 最近几天感觉Comfyui的界面操作不好用了&#xff0c;就是鼠标移动到一个节点上&#xff0c;如果想要缩放&#xff0c;按道理应该是在1的位置&#xff0c;但是需要移动到2的位置才能触发缩放的操作。 节点连线的时候&#xff0c;线…

stm32单片机学习 - 参考手册和数据手册

参考手册和数据手册 在学习和应用的时候&#xff0c;有两个官方资料文档经常会用到&#xff0c;一个是参考手册&#xff08;Reference mannual&#xff09;&#xff0c;另外一个是数据手册&#xff08;Data Sheet&#xff09;。一句话概括:数据手册主要用于芯片选型和设计原理…

Facebook的区块链技术:提升数据安全与隐私保护

去中心化的优势 随着数字化时代的快速发展&#xff0c;数据安全和隐私保护已成为全球范围内备受关注的话题。Facebook作为全球最大的社交平台之一&#xff0c;正在积极探索如何通过区块链技术来提升数据的安全性和用户的隐私保护。区块链技术以其去中心化、不可篡改和透明的特…

基于WEB的旅游推荐系统设计与实现

TOC springboot280基于WEB的旅游推荐系统设计与实现 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔…

洛谷 P6280 [USACO20OPEN] Exercise G

题目来源于&#xff1a;洛谷 题目本质&#xff1a;dp&#xff0c;素数筛法&#xff0c;质数 本题与P4161基本一模一样 首先&#xff0c;分析题目发现&#xff0c;某个排列的需要进行恰好 K 步变回原样&#xff0c;这个时候K的值就是这个排序中各个环的长的的最小公倍数(lcm)。…