Lower Bounded Wildcards

Upper Bounded Wildcards部分中已经展示上界通配符如何通过extends关键字将未知类型限制成特定类型或该类型的子类型。同样的,lower bounded(下界)通配将未知类型限制成特定类型或该类型的super type(超类型)

一个下界通配表示如下:先写一个通配符?,后面紧跟super关键字,最后是它的下界:<? super A>

你不能同时指定通配的上界和下界,只能两者选其一

假设我们想写一个函数将Integer类型的对象添加到列表中,我们希望函数对List<Integer>, List<Number>, List<Object>(任何能持有Integer值的)都起作用

为了编写一个函数对于Integer及其超类型(比如NumberObject)的列表都能工作,我们可以指定List<? super Integer>List<Integer>List<? super Integer>的限制更大,因为它只接受Integer类型的列表,而后者接受任何Integer的超类型。

下面一段代码在列表尾部添加数字1到10:

public static void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++) {
        list.add(i);
    }
}

Guidelines for Wildcard Use部分介绍了何时使用上界通配或者下界通配。

Last updated