我今天遇到一个有趣的问题。考虑下面的代码
public static class Parent {}
public static class Child extends Parent {}
Set<Child> childs = new HashSet();
Set<Parent> parents = (Set<Parent>)childs; //Error: inconvertible types
Parent parent = (Parent)new Child(); //works?!
为什么这样的演员阵容不起作用?我希望由于泛型的各种规则,隐式转换不起作用,但为什么显式转换不能起作用?
演员阵容不起作用,因为Java 泛型不是协变的.
如果编译器允许这样做:
List<Child> children = new ArrayList();
List<Parent> parents = (List<Parent>)children;
那么这种情况下会发生什么呢?
parents.add(new Parent());
Child c = children.get(0);
最后一行将尝试分配Parent
to a Child
——但是一个Parent
不是一个Child
!
All Child
are Parent
(since Child extends Parent
)但所有Parent
不是Child
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)