Java プログラミングでは、ラムダ式をシリアル化する必要があるシナリオに遭遇することは珍しくありません。ただし、ラムダを直接シリアル化しようとすると、NotSerializableException が発生することがよくあります。
次の例を考えてみましょう:
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 8 では、型の交差部分にオブジェクトをキャストするという賢い解決策が導入されています。ラムダの型に複数の境界を追加することで、ラムダをエレガントにシリアル化可能にすることができます。
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
この手法により、ラムダは Serializable インターフェイスを自動的に継承し、「ダミー」を必要とせずにシリアル化できるようになります。 SerializableRunnable インターフェイス。
以上がダミーインターフェイスを作成せずに Java でラムダ式をシリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。