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对象添加到数组列表中?
非常感谢!
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,这样你就可以添加Executive到List