ホームページ > Java > &#&チュートリアル > Java Lambda はシリアル化できますか?また、Java Lambda をシリアル化可能にするにはどうすればよいですか?

Java Lambda はシリアル化できますか?また、Java Lambda をシリアル化可能にするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-22 09:29:28
オリジナル
274 人が閲覧しました

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

ラムダはシリアル化できますか?

Java ラムダは本質的にシリアル化可能ではありません。つまり、ストリームに直接書き込んで後で読み戻すことはできません。これは、異なるコンテキスト間でラムダを永続化または送信しようとするときに課題となる可能性があります。

シリアル化の難題

次のコード スニペットを考えてみましょう:

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();
    }
}
ログイン後にコピー

上記のコードでラムダラムダをシリアル化しようとすると、NotSerializableException投げられる。これは、ラムダはデフォルトでは Java でシリアル化できないためです。

エレガントな Lambda シリアル化

この問題を解決してラムダのシリアル化を有効にするには、次の交差を利用できます。 Java 8 で導入された型機能。これにより、キャストに複数の境界を指定できるようになり、ラムダを効果的に両方のメソッドを実装するオブジェクトに変換できます。実行可能インターフェイスとシリアル化可能なインターフェイス。

シリアル化の課題をエレガントに解決する更新されたコードは次のとおりです。

Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
ログイン後にコピー

このソリューションを導入すると、ラムダをオブジェクト ストリームにシームレスに書き込み、永続化できるようになりました。ファイル システムにコピーされ、後で逆シリアル化されて実行されましたが、エラーや例外は発生しませんでした。

以上がJava Lambda はシリアル化できますか?また、Java Lambda をシリアル化可能にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート