?超类型Java泛型

Aci*_*der 0 java generics wildcard super

我有Java 8泛型问题.

我有以下类层次结构:

Employee is base class
Manager extends Employee
Executive extends Manager
Run Code Online (Sandbox Code Playgroud)

以下第(1)行无法编译:

(1) List<? super Manager> foos1 = new ArrayList<Executive>(); // error
Run Code Online (Sandbox Code Playgroud)

以下第2行和第3行编译好了:

(2) List<? super Manager> foos2 = new ArrayList<Manager>();   
(3) List<? super Manager> foos3 = new ArrayList<Employee>();  
Run Code Online (Sandbox Code Playgroud)

但是,即使我仍然可以像这样添加Executive:

(4) foos2.add(new Manager("Manager!",123));
(5) foos3.add(new Executive("Executive!",1.0,2));
Run Code Online (Sandbox Code Playgroud)

请解释为什么我不能分配变量的逻辑

<? super Manager> = ArrayList<Executive> 
Run Code Online (Sandbox Code Playgroud)

哪个Executive是Manager的超级管理员,但我仍然可以将Executive对象添加到数组列表中?

非常感谢!

The*_*ind 5

List<? super Manager> foos1 = new ArrayList<Executive>(); // error 
Run Code Online (Sandbox Code Playgroud)

? super SomeClass
这意味着您可以创建一个类的新List,它是SomeClass的超类.由于Executive不是超级经理,您无法分配List<? super Manager> foos1 = new ArrayList<Executive>();

接下来,为什么 foos3.add(new Executive("Executive!",1.0,2));有效?
现在,List<? super Manager> foos3 = new ArrayList<Employee>();可以接受任何Manager实例.原来Executive是一个Manager,这样你就可以添加ExecutiveList