String[]方法返回一个非空的java
我最近将eclipse项目移植到IJ,我的数组随机化器返回以下错误String[]方法返回一个非空的java,java,eclipse,intellij-idea,porting,Java,Eclipse,Intellij Idea,Porting,我最近将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.ra
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)
及
这是该方法的代码
public static String[] ranArr(String[] arr) {
List<String> i = Arrays.asList(arr);
Collections.shuffle(i);
String[] r = (String[]) i.toArray();
return r;
}
公共静态字符串[]ranArr(字符串[]arr){
列表i=Arrays.asList(arr);
收藏。洗牌(一);
字符串[]r=(字符串[])i.toArray();
返回r;
}
如何修复它,它在Eclipse中工作您可以将
(String[])I.toArray()替换为I.toArray(新字符串[0])
因为ArrayList可以存储任何类型的项,所以它在内部使用对象[]
来存储数组的内容
当您调用toArray()
时,它只返回该内部数组的一个副本,该数组又是一个对象[]
事实上,由于类型擦除(泛型类型的实例在运行时不知道其类型参数是什么类型的事实),ArrayList
无法执行任何其他操作
正如您所知,您正在存储字符串,您可以使用@Timur建议的toArray(新字符串[0])
该函数将查看您传递的数组的类型,并创建一个具有该类型的新数组。确保您的intellijidea使用相同的jdk作为Eclipse运行。它使用相同的jdk Java SE-1。8这不会在Eclipse中运行。它给出了完全相同的错误。是的,它工作了,但是为什么它工作在eclipse而不是IJ?很确定它不依赖于您的IDE,因为它发生在运行时。不幸的是,我没有使用Eclipse进行复制和深入研究。
public static String[] ranArr(String[] arr) {
List<String> i = Arrays.asList(arr);
Collections.shuffle(i);
String[] r = (String[]) i.toArray();
return r;
}