美文网首页
? extends T

? extends T

作者: flyjar | 来源:发表于2025-09-01 08:19 被阅读0次

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

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

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

  • T类型本身
  • T的任意直接子类
  • 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的另一个子类

使用场景与限制

  • 主要用于读取操作,可以安全地从集合中获取T类型的元素
  • 不能向集合中添加元素(除了null),因为编译器无法确定集合实际存储的是哪种T的子类

例如:

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

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

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

相关文章

网友评论

      本文标题:? extends T

      本文链接:https://www.haomeiwen.com/subject/ztimajtx.html