通配符和泛型

时间:2015-09-14 20:12:25

标签: java generics wildcard

我正在研究一个案例,我想知道为什么我可以在使用时修改列表?延伸,当我使用?超级我可以。

Leet看到这个虚拟代码:

class LivingBeing {
}

class Human extends LivingBeing {
}

class Citizen extends Human {
}

想象一下,我有这3个实例:

LivingBeing lb = new LivingBeing();
Human h = new Human();
Citizen c = new Citizen();

好吧,如果我编码,我可以声明并修改列表没有问题:

List<? super Human> l = new ArrayList<LivingBeing>();
l.add(h);

但为什么我收到编译错误如果我做了类似的事情:

//COMPILE ERROR
List<? extends Human> l = new ArrayList<Human>();
l.add(h);  
我很清楚什么?扩展类和?扩展类意味着,我只是我不明白乳清我不能使用扩展修改列表,我可以用它吗?超级。

此外,我知道如果我尝试修改一些仅使用通配符声明的列表,我会收到编译错误:

List<?> list = new ArrayList<>();

0 个答案:

没有答案