泛型通配符

!!! note 目录

泛型通配符

Java 泛型通配符(Wildcard)是泛型的一种重要特性,它在泛型的上下界(upper bound 和 lower bound)中起着关键作用,主要用于提升代码的灵活性和通用性。

Java 泛型通配符主要有以下三种:

  1. 无界通配符(Unbounded Wildcard):表示可以持有任意类型。使用 ? 表示。
  2. 上界通配符(Upper Bounded Wildcard):表示类型的上限。使用 ? extends T 表示。
  3. 下界通配符(Lower Bounded Wildcard):表示类型的下限。使用 ? super T 表示。

1. 无界通配符(Unbounded Wildcard)

无界通配符表示任何类型的对象都可以匹配。适用于你不需要使用泛型参数的方法。

1
2
3
4
5
public void printList(List<?> list) {
for (Object obj : list) {
System.out.println(obj);
}
}

2. 上界通配符(Upper Bounded Wildcard)

上界通配符用于限制泛型类型的上限。适用于你希望能使用泛型参数的方法,同时又希望泛型类型是某个类型/某个类型的子类或实现类

1
2
3
4
5
public void processList(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num.doubleValue());
}
}

在上述示例中,List<? extends Number> 表示 Number 或其子类的集合。

3. 下界通配符(Lower Bounded Wildcard)

下界通配符用于限制泛型类型的下限。适用于你希望能添加泛型参数的方法,同时又希望泛型类型是某个类型/某个类型的父类

1
2
3
4
public void addNumbers(List<? super Integer> list) {
list.add(1);
list.add(2);
}

在上述示例中,List<? super Integer> 表示 Integer 或其父类的集合。