java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JAVA泛型通配符上界和下界

JAVA泛型通配符的上界和下界的具体使用

作者:不穿铠甲的穿山甲

本文主要介绍了JAVA泛型通配符的上界和下界的具体使用,上界?extends T适合读操作,下界?super T适合写操作,具有一定的参考价值,感兴趣的可以了解一下

在 Java 泛型中,通配符(Wildcard) 用于表示未知的类型。为了增强灵活性和安全性,Java 提供了对通配符的上界(Upper Bound)下界(Lower Bound) 的限制。

一、通配符概述

⚠️ 使用 List<?> 后,不能向其中添加除 null 外的任何元素(因为编译器不知道具体类型),但可以读取为 Object。

二、通配符的上界(Upper Bound Wildcard)

语法:

? extends T

示例:

List<? extends Number> list = new ArrayList<Integer>();

可以读取元素为 Number 类型:

Number num = list.get(0);

❌ 不允许添加元素(除了 null):

list.add(123); // 编译错误!不知道实际类型是 Integer 还是 Double 等

用途:

三、通配符的下界(Lower Bound Wildcard)

语法:

? super T

示例:

List<? super Integer> list = new ArrayList<Number>();

可以添加 Integer 类型的对象:

list.add(10);

❌ 读取时只能作为 Object 类型:

Object obj = list.get(0); // 无法知道具体是 Number、Object 还是其他父类

用途:

四、对比总结

通配符形式含义可否添加元素可否读取元素典型用途
?任意类型✅(作为 Object)通用只读集合
? extends TT 或其子类✅(作为 T)读取特定类型的集合
? super TT 或其父类✅(作为 Object)写入特定类型的集合

小技巧:PECS 原则(Producer Extends, Consumer Super)

这是理解泛型通配符的经典原则:

示例代码:

public static void copy(List<? extends Number> source,
                        List<? super Number> dest) {
    for (Number number : source) {
        dest.add(number); // 写入到 dest
    }
}

总结

到此这篇关于JAVA泛型通配符的上界和下界的具体使用的文章就介绍到这了,更多相关JAVA泛型通配符上界和下界内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文