java – 无法转换泛型集?
发布时间:2020-12-15 05:19:41 所属栏目:Java 来源:网络整理
导读:我今天遇到了一个有趣的问题.请考虑以下代码 public static class Parent {}public static class Child extends Parent {}SetChild childs = new HashSet();SetParent parents = (SetParent)childs; //Error: inconvertible typesParent parent = (Parent)ne
我今天遇到了一个有趣的问题.请考虑以下代码
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 generics are not covariant.
如果编译器允许这样: List<Child> children = new ArrayList(); List<Parent> parents = (List<Parent>)children; 那么在这种情况下会发生什么? parents.add(new Parent()); Child c = children.get(0); 最后一行将尝试将Parent分配给Child – 但Parent不是Child! 所有孩子都是父母(因为孩子延伸父母),但所有父母都不是孩子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |