ホームページ > Java > &#&チュートリアル > ダミーインターフェイスを作成せずに Java でラムダ式をシリアル化するにはどうすればよいですか?

ダミーインターフェイスを作成せずに Java でラムダ式をシリアル化するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-07 09:13:11
オリジナル
750 人が閲覧しました

How Can I Serialize a Lambda Expression in Java Without Creating a Dummy Interface?

ラムダのシリアル化: ダミー インターフェイスを使用しないソリューション

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 サイトの他の関連記事を参照してください。

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