簡體   English   中英

強制轉換為對象數組時發生ClassCastException

[英]ClassCastException when casting to object array

我收到此運行時錯誤:

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

它來自這一行代碼,在這里我將文件內容轉換為Employee []

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

使我感到困惑的是錯誤中的“ [L””。 我不知道那是哪里來的。

[L Java [L表示“該類的一維對象數組,其全限定名緊隨其后,直到(並排除) ;符號為止”(例如[Ljava.lang.String;表示String[]數組)。 有關更多詳細信息,請參見StackOverflow上的相關問題

沒有更多細節,人們只能推測ClassCastException的原因。

顯然,您正在嘗試從ObjectInputStream反序列化Employee[]數組,該數組實際上是從序列化的Employee (不是Employee[] )對象讀取的。

問題可能出在序列化邏輯中。

要檢查是否存在這種情況,只需將readObject()調用readObject()Employee ,而不是Employee[] ,然后看是否可行。

可以在這里找到解釋字節碼(以及更多內容)的很好的讀物: http : //www.cubrid.org/blog/dev-platform/understanding-jvm-internals/-有關字節碼類型表達式,請參見表1。

您的情況很有趣(Java字節碼-類型-描述):

  • L-參考-類的實例
  • [-參考- 一維數組

次要nitpick:變量EmpArray不遵循Java命名約定,因為它以大寫字母開頭。 參考: http : //www.javapractices.com/topic/TopicAction.do? Id= 58

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM