小编Vic*_*nov的帖子

<?扩展Class>和<?Java中的超类>为什么它以这种方式工作?

还有一个新手,试图理解Java Generics.我发现,我观察了所有主题,但我仍然有很多问题.能否请你解释一下以下事项:

  1. <? extends SomeClass>意思?是"任何类型",并且extends SomeClass意味着任何类型都只能是它的子类SomeClass.好的,我写了两个小学课:
abstract class Person {
    private String name;
    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {
    public Student(String name) {
        super(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

Student?在我们的示例中.? extends Person确切地说.然后我试图将新学生添加到ArrayList,正如我从上面所写的那样,它应用所有类,它们是Person的子类:

Student clarissa = new Student("Clarissa Starling");
List<? extends Person> list = new ArrayList<>();
list.add(clarissa); //Does not compile
Run Code Online (Sandbox Code Playgroud)

Eclipse说:

"类型List中的方法add(捕获#3-of?extends Person)不适用于参数(Student)"

Student当我们声明List <? extends Person>,参数化并Student完全扩展类时,类怎么可能不适用Person? …

java generics

20
推荐指数
2
解决办法
1万
查看次数

标签 统计

generics ×1

java ×1