转换为对象数组时出现ClassCastException

时间:2013-12-13 22:55:43

标签: java arrays exception runtime-error classcastexception

我收到此运行时错误:

Exception in thread "main" java.lang.ClassCastException: Employee cannot be cast to [LEmployee;

它来自这行代码,我将文件内容转换为Employee []

Employee[] EmpArray;
EmpArray = (Employee[]) objectIn.readObject();

令我困惑的是错误中的“[L”。我不知道它来自哪里。

2 个答案:

答案 0 :(得分:2)

[L中的

Java表示"类的一维对象数组,其完全限定名称紧跟其后,直到(并排除);符号& #34; (例如,[Ljava.lang.String;表示String[]数组)。有关详细信息,请参见StackOverflow上的related question

如果没有更多细节,我们只能推测ClassCastException的原因。

显然,您正在尝试从Employee[]反序列化ObjectInputStream数组,该数组实际上是从序列化的Employee(非Employee[])对象中读取的。

问题可能出在序列化逻辑中。

要检查是否属于这种情况,只需将readObject()来电转为Employee,而不是Employee[],然后查看是否有效。

答案 1 :(得分:2)

可以在此处找到解释字节码(以及更多)的相当好的读取:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/ - 有关字节码类型表达式,请参阅表1.

您的案例很有趣(Java字典 - 类型 - 描述):

  • L - reference - 类的实例
  • [ - 参考 - 一个数组维度

轻微的挑剔:你的变量EmpArray不遵循Java命名约定,因为它以大写字母开头。参考:http://www.javapractices.com/topic/TopicAction.do?Id=58