Java学习——泛型通配符

Java泛型的通配符?(问号)是一种特殊的类型参数,用于表示未知的类型。通配符可以在使用泛型类型时提高代码的灵活性,使得一个泛型容器能够引用多种不同类型的泛型对象。主要有三种类型的通配符使用场景:无界通配符、有界通配符(上界和下界)。

1. 无界通配符(?

无界通配符?表示任意类型,它的主要用途是在读取或操作集合时,表示你不关心集合中元素的具体类型。

示例
java 复制代码
public void printList(List<?> list) {
    for (Object item : list) {
        System.out.println(item);
    }
}

这里的List<?>表示一个未知类型元素的列表,printList方法可以接受任何类型的List对象。

2. 有界通配符

有界通配符限制了未知类型的范围,包括上界通配符(? extends Type)和下界通配符(? super Type)。

上界通配符(? extends Type

上界通配符? extends Type表示类型的上限,它意味着任何继承自Type的类型都可以被接受。

java 复制代码
public void printNumbers(List<? extends Number> list) {
    for (Number num : list) {
        System.out.println(num);
    }
}

这里的List<? extends Number>可以接受List<Integer>List<Double>等任何Number子类的列表。

下界通配符(? super Type

下界通配符? super Type表示类型的下限,它允许列表引用Type类型或任何Type的父类型。

java 复制代码
public void addNumbers(List<? super Integer> list) {
    list.add(10); // 可以添加Integer或其子类的实例
}

这里的List<? super Integer>可以是List<Integer>List<Number>List<Object>等。

通配符的使用原则

  • 如果你需要从集合中读取类型T的数据,并且不能写入,可以使用? extends T(生产者)。
  • 如果你需要向集合中写入类型T的数据,并且不需要读取,可以使用? super T(消费者)。
  • 如果既不需要读取也不需要写入,可以使用无界通配符?
相关推荐
啾啾Fun8 分钟前
【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
java·redis·分布式·微服务·lua·redisson
消失的旧时光-194323 分钟前
Android USB 通信开发
android·java
惊鸿一博25 分钟前
java_网络服务相关_gateway_nacos_feign区别联系
java·开发语言·gateway
Bruce_Liuxiaowei30 分钟前
深入理解PHP安全漏洞:文件包含与SSRF攻击全解析
开发语言·网络安全·php
成工小白30 分钟前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针
sc写算法33 分钟前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json
Andrew_Xzw38 分钟前
数据结构与算法(快速基础C++版)
开发语言·数据结构·c++·python·深度学习·算法
库库的里昂39 分钟前
【C++从练气到飞升】03---构造函数和析构函数
开发语言·c++
多多*3 小时前
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
linux·开发语言·redis·python·bootstrap·lua
Wish3D4 小时前
阿里云OSS 上传文件 Python版本
开发语言·python·阿里云