首頁 > Java > java教程 > Java Lambda 可以序列化嗎?

Java Lambda 可以序列化嗎?

Mary-Kate Olsen
發布: 2024-12-22 09:29:28
原創
360 人瀏覽過

Can Java Lambdas Be Serialized, and How Can We Make Them Serializable?

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板