在学习 Java泛型边界 的过程中,很多初学者会感到困惑:为什么有时候不能把子类对象放进泛型容器?为什么有些方法只能接受特定类型的泛型?其实,这背后的核心机制就是有界通配符(Bounded Wildcards)。本文将用通俗易懂的方式带你掌握 Java泛型教程 中这一关键知识点。
泛型边界(也叫有界类型参数)是指在定义泛型类、接口或方法时,对类型参数施加限制。比如我们只希望某个泛型方法能处理 Number 及其子类(如 Integer、Double),这时就可以使用上界(Upper Bound)来限定。

使用 <T extends SomeClass> 表示类型参数 T 必须是 SomeClass 或其子类。注意:这里的 extends 不仅适用于类,也适用于接口。
public class Box<T extends Number> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } // 计算值的平方(因为Number有doubleValue方法) public double square() { return value.doubleValue() * value.doubleValue(); }}上面的 Box 类只能接受 Number 的子类:
Box<Integer> intBox = new Box<>(); // ✅ 合法Box<Double> doubleBox = new Box<>(); // ✅ 合法Box<String> strBox = new Box<>(); // ❌ 编译错误!String 不是 Number 的子类除了上界,Java 还支持下界(Lower Bound),使用 <? super SomeClass> 表示通配符类型必须是 SomeClass 或其父类。这在集合操作中非常有用,尤其是“生产者-消费者”模型。
// 将整数添加到Number或Object类型的列表中public static void addNumbers(List<? super Integer> list) { list.add(10); list.add(20);}public static void main(String[] args) { List<Number> numbers = new ArrayList<>(); List<Object> objects = new ArrayList<>(); addNumbers(numbers); // ✅ 合法 addNumbers(objects); // ✅ 合法}这是使用泛型边界时的经典口诀:
<? extends T><? super T>通过本篇 Java泛型教程,你应该已经理解了 Java泛型边界 的核心概念。记住:
extends 用于限制类型为某类或其子类,适合读取数据super 用于限制类型为某类或其父类,适合写入数据希望这篇教程能帮你轻松跨越泛型边界的学习门槛!动手写几个例子试试吧~
本文由主机测评网于2025-12-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025127076.html