温馨提示×

温馨提示×

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

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

extends泛型边界怎么用

发布时间:2026-09-30 19:25:39 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 中,extends 用于泛型边界(Generic Bounds),主要作用是限制泛型类型的取值范围。常见有 3 种用法,下面用通俗示例说明。


一、上界通配符(最常用):? extends T

含义:
表示“未知类型,但必须是 T 或 T 的子类”。

示例

List<? extends Number> list;

✅ 可以接收:

List<Integer> a;
List<Double> b;

❌ 不能接收:

List<String>

重要规则(读取安全,写入受限)

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

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

原因:
编译器不知道具体是 Integer 还是 Double,为了类型安全,禁止写入。

✅ 适用场景:只读遍历

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

二、泛型方法/类中的上界:T extends Bound

含义:
限定泛型参数 T 必须是某个类或其子类。

类示例

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

✅ 合法:

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

❌ 非法:

Box<String> b3;

方法示例

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

三、多重边界(接口 + 类)

<T extends Number & Comparable<T>> void test(T t) {}

规则:

  • 最多一个类
  • 类必须放在最前面

四、对比总结

写法 含义 能否写入
T extends Number T 是 Number 或其子类 ✅
? extends Number 未知子类 ❌
? super Number 未知父类 ✅(部分)

五、记忆口诀

extends 读,super 写(PECS 原则)

如果你愿意,我也可以结合 PECS、泛型擦除、或者实际项目场景 再细讲。

向AI问一下细节

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

AI
助
手