栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有多个孩子的树的数组中的泛型类型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有多个孩子的树的数组中的泛型类型

泛型和数组在Java中根本混合不好。仅使用

List<T>
您正在考虑的实现会容易得多:

List<Node<T>> arrChildren = new linkedList<>();

更长的解释:

数组:

  • 在运行时跟踪其组件类型。
  • 是协变的(a
    Integer[]
    是a
    Number[]
    是an
    Object[]
    )。

通用类型:

  • 将其类型参数由编译器删除,以使其在运行时不可用。呼叫到并使用适当的强制转换为
    Node<String>
    呼叫。
    Node``String
  • 不是协变的(一个
    List<Integer>
    不是 一个
    List<Number>
    )。

new Node<T>[size]
不允许的原因是因为数组需要在运行时知道其组件类型,这时不再有的概念
T
。只
newNode<?>[size]
允许类似的东西。

忽略创建一个数组的限制

Node<T>
是不安全的,因为可能出现以下情况:

Node<Integer>[] intNodeArray = ...;Object[] objArray = intNodeArray; //legal because arrays are covariantobjArray[0] = new Node<String>("asfd"); //should fail but doesn't...//sometime laterNode<Integer> intNode = intNodeArray[0]; //still doesn't fail because of erasureInteger i = intNode.getValue(); //only now do we get a runtime exception

Node<String>
数组添加a 应该会 引发运行时异常,但这不是因为数组仅知道其组件类型为
Node
,而不是
Node<Integer>

有关更多信息,请参见Angelika
Langer的泛型常见问题解答:是否可以创建其组件类型为具体参数化类型的数组?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号