java - java中奇怪的ClassCastException

标签 java java-8 classcastexception

我写了一些代码如下:

public class MyClass {
    public static void main(String[] args) {
        printIt(getLong());
        System.out.println("---------");
    }

    public static Object printIt(Object... objects) {
        System.out.println(objects[0].toString());
        return objects[0];
    }

    public static <T> T getLong() {
        return (T)Long.valueOf(1L);
    }
}

当我运行它时,它抛出 java.lang.ClassCastException 如下:

Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to [Ljava.lang.Object; at com.sealinetech.MyClass.main(MyClass.java:5)

但是当我用Evaluate Expression调试它时,就OK了 Evaluate Expression is OK

我的IDE是intellij,JDK版本是jdk1.8.0_144

最佳答案

getLong方法具有通用返回类型。在编译时,编译器决定使用 Object[] 来调用它结果类型,因为printIt接受此参数类型。在运行时编译器建议失败,因此您会收到此错误:java.lang.Long cannot be cast to [Ljava.lang.Object

您可以使用 printIt(this.<Object>getLong()); 指定预期类型(感谢@CoderinoJavarino)

关于java - java中奇怪的ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499836/

相关文章:

java - 使用 "id"字段更新列表的子部分

java - 从 JSON 读取长值时出现 ClassCastException

android.app.Application 中的 android classcastexception

java - 为什么我的 ObjectInputStream 抛出 EOFException?

java - 找不到 : Gradle DSL method not found: 'complite()'

java - 可运行和 lambda

Java 8 stream.collect( ... groupingBy ( ... mapping( ... reducing ))) 减少 BinaryOperator 的使用

java - 错误将字符串转换为日期 : ClassCastException

java - 通过 intellij hibernate 持久化工具生成模型时关系引用禁用表

java - 使用多个数据源的 Spring 事务管理