我收到此运行时错误:
Exception in thread "main" java.lang.ClassCastException: Employee cannot be cast to [LEmployee;
它来自这行代码,我将文件内容转换为Employee []
Employee[] EmpArray;
EmpArray = (Employee[]) objectIn.readObject();
令我困惑的是错误中的“[L”。我不知道它来自哪里。
答案 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字典 - 类型 - 描述):
轻微的挑剔:你的变量EmpArray
不遵循Java命名约定,因为它以大写字母开头。参考:http://www.javapractices.com/topic/TopicAction.do?Id=58