类强制转换异常和泛型(java)

时间:2014-02-18 18:21:42

标签: java generics classcastexception

我正在实现自己的优先级队列并使用一个名为sportsball的类来使用它。优先级队列基于泛型并使用节点(T对象,int值)(也称为播放器名称及其分数)。我尝试运行程序时收到类强制转换异常错误。

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueue$Node;
    at PriorityQueue.<init>(PriorityQueue.java:35)
    at sportsball.main(sportsball.java:48) 

有问题的行是: PriorityQueue.java:35:

Node[] array = (Node[])(new Object[initialSize]);

sportsball.java:48:

PriorityQueue<String> queue = new PriorityQueue<String>(start, step);

感谢您的帮助!

注意:

当我尝试使用行PriorityQueue.java:35时:

Node[] array = new Node[initialSize];

错误:而是弹出通用数组创建。

3 个答案:

答案 0 :(得分:2)

您无法将Object投射到Node,因此您无法将Object[]投射到Node[]。只需直接创建Node[]

Node[] array = new Node[initialSize];

答案 1 :(得分:0)

您不能像对待

那样将对象强制转换为Node
Node[] array = (Node[])(new Object[initialSize]);

因此异常ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueue$Node很明显,对象无法转换为节点类型

所以你可以使用这个选项

Node[] array = new Node[initialSize];

答案 2 :(得分:0)

您不能简单地将Object []强制转换为Node []。这确实会产生ClassCastException。只需创建一个Node [](Node[] array = new Node[initialSize];)。没有比这更多的代码,我不能说任何其他的事情。

请注意,ClassCastException的消息已经指示了问题。 [Ljava.lang.Object;代表Object[],类似地,[LPriorityQueue$Node;代表Node[]