温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java泛型上下界怎么用

发布时间:2026-10-21 09:33:47 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 中,泛型上下界主要通过 通配符(Wildcard) 来使用,作用是限制泛型参数的类型范围,提高代码的灵活性和安全性。


一、上界(Upper Bound):<? extends T>

含义:
表示泛型类型 可以是 T 或 T 的子类

1️⃣ 语法

List<? extends Number> list;

表示:

  • Number
  • Integer
  • Double
  • Float 等都可以

2️⃣ 使用场景(读取数据)

✅ 适合读取(Producer)

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

Number n = list.get(0); // ✅ 可以读取
// list.add(1);         // ❌ 编译错误

❗ 不能写入(除了 null) 因为编译器不知道具体是 Integer 还是 Double

3️⃣ 典型例子

public void printNumbers(List<? extends Number> list) {
    for (Number n : list) {
        System.out.println(n);
    }
}

二、下界(Lower Bound):<? super T>

含义:
表示泛型类型 可以是 T 或 T 的父类

1️⃣ 语法

List<? super Integer> list;

表示:

  • Integer
  • Number
  • Object

2️⃣ 使用场景(写入数据)

✅ 适合写入(Consumer)

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

list.add(1);      // ✅ 可以写入
// Integer i = list.get(0); // ❌ 只能当作 Object

3️⃣ 典型例子

public void addNumbers(List<? super Integer> list) {
    list.add(1);
    list.add(2);
}

三、无界通配符:<?>

List<?> list;

表示:

  • 任意类型
  • 只能读(当 Object)
  • 不能写(除了 null)
list.add(null); // ✅
// list.add("a"); // ❌

四、PECS 原则(重要)

PECS = Producer Extends, Consumer Super

场景 使用
只读取数据 <? extends T>
只写入数据 <? super T>

五、泛型方法中的上下界

public <T extends Comparable<T>> T max(T a, T b) {
    return a.compareTo(b) > 0 ? a : b;
}

表示:

  • T 必须是 Comparable 的实现类

六、常见对比总结

写法 能读 能写
List<T> ✅ ✅
List<? extends T> ✅ ❌
List<? super T> ❌(Object) ✅
List<?> ✅(Object) ❌

如果你愿意,我可以:

  • 用 类图 / 例子 再讲一遍
  • 结合 真实业务场景(如 DAO、工具类)
  • 或对比 Kotlin / C++ 泛型

你想从哪方面深入?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手