【发布时间】:2018-01-29 11:08:41
【问题描述】:
我写了一些代码如下:
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 如下:
线程“主”java.lang.ClassCastException 中的异常: java.lang.Long 不能转换为 [Ljava.lang.Object;在 com.sealinetech.MyClass.main(MyClass.java:5)
但是当我用 Evaluate Expression 调试它时,没关系 Evaluate Expression is OK
我的IDE是intellij,JDK版本是jdk1.8.0_144
【问题讨论】:
-
您将
Long转换为Object[]。只是不要这样做。 -
我强烈反对像您的
public static <T> T getLong()这样的方法签名,因为您无法从任何参数推断类型 T。典型用法有一些类型 T 的参数,例如public static <T> T doSomething(T arg). -
正如每本教科书所说的那样。当您忽略“未检查”警告时,您可能会在运行时收到奇怪的
ClassCastExceptions…… -
类似于this issue...
-
当我运行应用程序时,它在 printIt(getLong()) 行中抛出 ClassCastException,但我将 printIt(getLong()) 复制到 Evaluate Expression 工具然后单击 Evaluate 按钮,它可以正确输出结果,就像上图一样。所以我想知道为什么java使用不同的类型推断方法。
标签: java java-8 classcastexception