有人能告诉我这段代码中的错误是什么吗?
public class Node<T> {
private int degree;
@SuppressWarnings("unchecked")
T[] keys ;
Node<T>[] children;
Node(int degree) {
System.out.println(degree);
this.degree = degree;
@SuppressWarnings("unchecked")
Node<T>[] children = (Node<T>[])new Object[degree * 2];
@SuppressWarnings("unchecked")
T[] keys = (T[])new Object[(degree * 2) - 1];
}
public static void main(String[] s) {
Node<Integer> a = new Node<Integer>(5);
}
}基本上,我想要一种自我引用的东西,一个对象存储它自己的对象的数组。我收到了这个错误
线程“
”java.lang.ClassCastException中的Ljava.lang.Object异常:[Ljava.lang.Object;不能转换为[Tree.Node;;
树是我的包裹名。
发布于 2011-02-16 19:34:07
你不能做一个类型化数组。你必须这样做:
Node<T>[] children = new Node[degree * 2];并处理数组是非类型化的事实:
发布于 2011-02-16 19:51:30
使用List<Node<T>>和List<T> (和ArrayList作为实现),而不是为您的子键和键使用数组。这样,您就可以在ArrayList类中隐藏数组创建和转换的复杂性。(它也使用Object[],但只在get()和类似方法上进行转换,而不是尝试使用泛型数组)。
或者,由于看起来您正在创建某种映射,所以使用Map<T, Node<T>>作为您的键和节点(但是,您没有索引访问权限)。
发布于 2011-02-16 19:35:24
你不能这样做:
Node<T>[] children = (Node<T>[])new Object[degree * 2];在这里,您正在创建一个对象数组,而对象不是一个节点。您应该创建一个节点数组,即
Node<T>[] children = new Node[degree * 2];代码中有两次相同的错误。
https://stackoverflow.com/questions/5021182
复制相似问题