问题描述
我最近将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])
。
该函数将查看您传递的数组的类型,并使用该类型创建一个新的数组。