Lamda 可以序列化嗎?
Java lambda 本質上不是可序列化的,這意味著它們不能直接寫入流並稍後讀回。當嘗試在不同的上下文中持久化或傳輸 lambda 時,這可能會帶來挑戰。
序列化難題
考慮以下程式碼片段:
public static void main(String[] args) throws Exception { File file = Files.createTempFile("lambda", "ser").toFile(); try (ObjectOutput oo = new ObjectOutputStream(new FileOutputStream(file))) { Runnable r = () -> System.out.println("Can I be serialized?"); oo.writeObject(r); } try (ObjectInput oi = new ObjectInputStream(new FileInputStream(file))) { Runnable r = (Runnable) oi.readObject(); r.run(); } }
當嘗試序列化上述程式碼中的lambda 表達式時,會拋出NotSerializedException。這是因為 lambda 預設在 Java 中不可序列化。
優雅的 Lambda 序列化
要解決此問題並啟用 lambda 序列化,我們可以利用以下交集Java 8 中引入的類型功能。這允許我們為強制轉換指定多個邊界,有效地將 lambda 轉換為實作 Runnable 和可序列化介面。
這裡是優雅地解決序列化挑戰的更新程式碼:
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
有了這個解決方案,lambda 現在可以無縫寫入物件流,持久化到檔案系統,然後反序列化並執行,沒有任何錯誤或異常。
以上是Java Lambda 可以序列化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!