温馨提示×

温馨提示×

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

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

什么是泛型上限

发布时间:2026-10-21 08:37:44 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

**泛型上限(Upper Bound of Generics)**通常出现在支持泛型(Generics)的编程语言中,比如 Java、Kotlin、C#(概念类似) 等。它的作用是:限制泛型类型参数必须是指定类型或其子类型。


一、为什么需要泛型上限?

在没有上限的情况下,泛型可以接收任意类型,但这会导致:

  • 无法调用某些特定方法
  • 类型不安全

通过设定上限,可以:

  • 限制可传入的类型范围
  • 在泛型代码中安全使用上限类型的方法

二、Java 中的泛型上限(最典型)

1️⃣ 单上限(extends)

<T extends Number>

含义:

T 必须是 Number 或 Number 的子类(如 Integer、Double)

示例:

public <T extends Number> double sum(T a, T b) {
    return a.doubleValue() + b.doubleValue();
}

✅ 可以使用 Number 的方法
❌ 不能传 String


2️⃣ 多上限(接口 + 类)

<T extends Number & Comparable<T>>

含义:

T 必须既是 Number 的子类,又实现了 Comparable


3️⃣ 通配符上限(? extends)

用于泛型集合或变量声明:

List<? extends Number> list;

含义:

list 可以指向 List<Integer>、List<Double> 等

⚠️ 限制:

  • 只能读取,不能写入(除 null)
Number n = list.get(0); // ✅
list.add(1);            // ❌

三、Kotlin 中的泛型上限

1️⃣ 类型参数上限

fun <T : Number> sum(a: T, b: T): Double {
    return a.toDouble() + b.toDouble()
}

2️⃣ 协变(out,类似 ? extends)

class Box<out T : Number>

四、泛型上限 vs 下限

类型 含义 示例
上限 必须是某类或其子类 ? extends Number
下限 必须是某类或其父类 ? super Integer

五、一句话总结

泛型上限就是:给泛型类型“封顶”,只允许它是指定类型或其子类型,从而保证类型安全并可使用上限类型的方法。

如果你愿意,我也可以用 图解 / 面试题 / 和 PECS 原则 再深入讲。

向AI问一下细节

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

AI
助
手