我正在实现自己的优先级队列并使用一个名为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];
错误:而是弹出通用数组创建。
答案 0 :(得分:2)
您无法将Object
投射到Node
,因此您无法将Object[]
投射到Node[]
。只需直接创建Node[]
。
Node[] array = new Node[initialSize];
答案 1 :(得分:0)
您不能像对待
那样将对象强制转换为NodeNode[] 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[]
。