【问题标题】:Creating an array of double generic - Java创建一个双泛型数组 - Java
【发布时间】:2016-05-21 09:03:51
【问题描述】:

所以我试图创建一个双泛型类的数组,但由于某种原因它给了我一个错误。

代码:

Node<K, V>[] table = (Node<K, V>[]) new Object[10];

我收到以下错误:

线程“main”中的异常 java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 [HashCache$Node;

所以,我想知道为什么它会给我这个错误,我该如何解决它。

【问题讨论】:

  • 不要使用泛型和数组,它们不能很好地结合在一起。
  • 一个对象不一定是一个节点,更重要的是,一个对象数组当然不是一个节点数组。

标签: java arrays generics casting


【解决方案1】:

Object[] 不是Node[] - 例如,您可以将Object[] 的元素设置为"Hello Word",而Node[] 则无法做到这一点。 TL;DR,你应该创建一个Node[]

Node<K, V>[] table = new Node[10];

【讨论】:

  • 你还需要演员表。 Node&lt;K, V&gt;[] table = (Node&lt;K, V&gt;) new Node[10];
  • @PeterLawrey 没有演员表,这只是一个未经检查的分配警告。对于演员表((Node&lt;K,V&gt;[]),顺便说一句,不是(Node&lt;K,V&gt;)),这是一个未经检查的演员表警告,所以它有点像“选择你的毒药”场景。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多