我写了一些代码如下:
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/