ラムダはシリアル化できますか?
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 サイトの他の関連記事を参照してください。