【问题标题】:String[] method returns a not-null javaString[] 方法返回一个非空的 java
【发布时间】:2021-02-07 02:04:15
【问题描述】:

我最近将我的 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 中有效

【问题讨论】:

  • 确保你的intellijidea使用同一个jdk作为eclipse运行
  • 是的,它是同一个 JDK Java SE-1.8
  • 这不在 Eclipse 中运行。它给出了完全相同的错误。

标签: java eclipse intellij-idea porting


【解决方案1】:

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

【讨论】:

  • 是的,它起作用了,但为什么它会起作用并且 Eclipse 而不是 IJ?
  • 很确定它不依赖于您的 IDE,因为它发生在运行时。不幸的是,我没有使用 Eclipse 来重现和深入查看。
【解决方案2】:

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

当您调用toArray() 时,它只是返回该内部数组的副本,这又是一个Object[]

事实上,由于类型擦除(泛型类型的实例在运行时不知道其类型参数是什么类型的事实)ArrayList 不能做任何其他事情。

你知道你正在存储字符串,你可以使用toArray(new String[0]),正如@Timur 建议的那样。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2020-01-14
    • 2016-11-06
    • 2017-09-02
    相关资源
    最近更新 更多