加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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!

所有孩子都是父母(因为孩子延伸父母),但所有父母都不是孩子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读