温馨提示×

温馨提示×

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

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

java泛型边界怎么定

发布时间:2026-09-30 18:55:37 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

在 Java 里,**泛型边界(Generic Bounds)**用来限制泛型类型参数能接受的类型范围。常见有 上界、下界、无界 三种,写法集中体现在 <T extends ...> 和 <? extends ...>、<? super ...> 上。

下面系统讲一下。


一、上界(Upper Bound)

1️⃣ 类 / 接口上界

含义:T 必须是某类或其子类,或某接口的实现类。

<T extends Number>

示例:

public class Box<T extends Number> {
    private T value;
}

✅ 合法:

Box<Integer> b1;
Box<Double> b2;

❌ 不合法:

Box<String> b3; // String 不是 Number

2️⃣ 多边界(& 连接)

<T extends A & B & C>

注意:

  • 只能有一个类
  • 类必须写在最前面
<T extends Animal & Serializable & Comparable<T>>

二、下界(Lower Bound)

只用于 通配符

<? super Integer>

含义:
可以是 Integer,或其任意父类

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

✅ 可写入 Integer ❌ 读取只能是 Object


三、无界通配符

<?>

表示:

  • 未知类型
  • 可读 Object
  • 不能写入(除了 null)
List<?> list;

四、PECS 原则(重点)

Producer Extends, Consumer Super

生产者(读数据)→ extends

void read(List<? extends Number> list) {
    Number n = list.get(0);
}

消费者(写数据)→ super

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

五、方法泛型边界

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

六、常见错误对比

写法 含义
<T extends Number> T 是 Number 子类
<? extends Number> 未知 Number 子类
<? super Integer> Integer 或其父类
<?> 任意类型

七、总结口诀

类用 extends 定上界,通配符用 super 定下界,PECS 记心间

如果你有具体场景(比如集合、泛型方法、Builder、DAO),我可以给你更贴近代码的例子。

向AI问一下细节

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

AI
助
手