? extends T

2025-09-01  本文已影响0人  flyjar

在Java泛型中,? extends T 表示上界通配符(Upper Bounded Wildcard),用于限制泛型类型的范围。

它的含义是:匹配所有T类型及其子类类型

具体来说,当你看到 ? extends T 时,表示这个泛型参数可以是:

举个例子:

// 定义一个父类
class Animal {}

// 定义子类
class Dog extends Animal {}
class Cat extends Animal {}

// 使用上界通配符
List<? extends Animal> list;

// 以下赋值都是合法的
list = new ArrayList<Animal>();  // T本身
list = new ArrayList<Dog>();     // T的子类
list = new ArrayList<Cat>();     // T的另一个子类

使用场景与限制

例如:

List<? extends Animal> animals = new ArrayList<Dog>();
animals.add(new Dog());  // 编译错误!
animals.add(null);       // 唯一允许的添加操作

Animal a = animals.get(0);  // 合法,可以安全获取Animal类型

这种通配符的核心作用是提高泛型的灵活性,允许方法接收更广泛的类型参数,同时保证类型安全。

上一篇 下一篇

猜你喜欢

热点阅读