我不明白为什么/什么时候应该使用Upper-Bounded Wildcards,因为你不能使用它。这是一个例子:
import java.util.ArrayList;
import java.util.List;
public class Test {
static class Parent { }
static class Child extends Parent { }
public static void main(String[] args) {
List<? extends Parent> family = new ArrayList<>();
family.add(new Child()); // 1. Doesn't compile
family.add(new Parent()); // 2. Doesn't compile
// List<Parent> parents = new ArrayList<>();
// List<Child> childs = new ArrayList<>();
// parents.add(new Child()); // 3. Compile fine
// childs.add(new Parent()); // 4. Doesn't compile
}
}
第1点和第2点无法编译。根据我的理解,这将无法编译,因为List<? extends Parent>
可以是List<Parent>
或List<Child>
,并且由于您无法在List中添加Parent实例,因此Java阻止我们执行此操作并给出编译错误。所以我的问题是使用Upper-Bounded Wildcards有什么意义?