【问题标题】:java generic array and Classcast exceptionjava泛型数组和Classcastexception
【发布时间】:2018-06-12 10:23:29
【问题描述】:

我已将 BinaryTree 声明如下:

public class BinaryTree<T extends Comparable<T>> {}

但是当我打电话时

Character[] actual = binaryTreeChar.preOrderTraversal(root, Character[].class); 

它抛出异常如下。

java.lang.ClassCastException: [[Ljava.lang.Character;不能施放 到 [Ljava.lang.Comparable;

有没有更好的方法来处理这些情况?

public T[] preOrderTraversal(BinaryNode<T> root, Class<T[]> clazz) {
        if (root == null)
            return null;
        T[] array = (T[]) Array.newInstance(clazz, count);
        Stack<BinaryNode<T>> stack = new Stack<>();
        stack.push(root);
        int i = 0;
        while (!stack.empty()) {
            BinaryNode<T> next = stack.pop();
            array[i++] = next.data;
            if (next.right != null)
                stack.push(next.right);
            if (next.left != null)
                stack.push(next.left);
        }
        return array;
    }


}

【问题讨论】:

  • @PeterBruins 意识到这一点,谢谢。

标签: java arrays generics classcastexception


【解决方案1】:

应该是:

public T[] preOrderTraversal(BinaryNode<T> root, Class<T> clazz)

还有:

Character[] actual = binaryTreeChar.preOrderTraversal(root, Character.class);

现在,您正在创建 Character[][] 的实例(即二维数组)。

传递给Array.newInstanceClass是数组的组件类型,不是数组类型。

对象 java.lang.reflect.Array.newInstance(Class componentType, int length) 抛出 NegativeArraySizeException

创建一个具有指定组件类型和长度的新数组...

参数:

componentType 表示新数组的组件类型的 Class 对象
length 新数组的长度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-11-30
    相关资源
    最近更新 更多