如果无法使用,请使用上限通配符

时间:2017-11-10 22:32:36

标签: java generics

我不明白为什么/什么时候应该使用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有什么意义?

0 个答案:

没有答案