String []方法返回一个非空的java

问题描述

我最近将eclipse项目移植到IJ,并且数组随机化器返回以下错误

java.lang.classCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')
    at Constants.func.ranArr(func.java:42)

(String[]) i.toArray();in func.ranArr(String[])(filter not-null)

这是方法代码

    public static String[] ranArr(String[] arr) {
        List<String> i = Arrays.asList(arr);
        Collections.shuffle(i);
        String[] r = (String[]) i.toArray();
        return r;
    }

我如何解决它,它在Eclipse中起作用

解决方法

您可以将(String[]) i.toArray()替换为i.toArray(new String[0])

,

因为ArrayList可以存储任何类型的项,所以在内部它使用Object[]来存储数组的内容。

调用toArray()时,它仅返回该内部数组的副本,该副本又是Object[]

实际上,由于类型擦除(一个通用类型的实例在运行时不知道其类型参数是哪种类型的事实),ArrayList不能做其他任何事情。

您知道要存储字符串,因此可以使用@Timur建议的toArray(new String[0])

该函数将查看您传递的数组的类型,并使用该类型创建一个新的数组。