首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的类强制转换异常:无法强制转换

Java中的类强制转换异常:无法强制转换
EN

Stack Overflow用户
提问于 2011-02-16 19:30:53
回答 4查看 8.3K关注 0票数 0

有人能告诉我这段代码中的错误是什么吗?

代码语言:javascript
复制
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;;

树是我的包裹名。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-16 19:34:07

你不能做一个类型化数组。你必须这样做:

代码语言:javascript
复制
Node<T>[] children = new Node[degree * 2];

并处理数组是非类型化的事实:

票数 2
EN

Stack Overflow用户

发布于 2011-02-16 19:51:30

使用List<Node<T>>List<T> (和ArrayList作为实现),而不是为您的子键和键使用数组。这样,您就可以在ArrayList类中隐藏数组创建和转换的复杂性。(它也使用Object[],但只在get()和类似方法上进行转换,而不是尝试使用泛型数组)。

或者,由于看起来您正在创建某种映射,所以使用Map<T, Node<T>>作为您的键和节点(但是,您没有索引访问权限)。

票数 2
EN

Stack Overflow用户

发布于 2011-02-16 19:35:24

你不能这样做:

代码语言:javascript
复制
Node<T>[] children = (Node<T>[])new Object[degree * 2];

在这里,您正在创建一个对象数组,而对象不是一个节点。您应该创建一个节点数组,即

代码语言:javascript
复制
Node<T>[] children = new Node[degree * 2];

代码中有两次相同的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5021182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档