Heim >Java >javaLernprogramm >Wie kann ich einen Lambda-Ausdruck in Java serialisieren, ohne eine Dummy-Schnittstelle zu erstellen?

Wie kann ich einen Lambda-Ausdruck in Java serialisieren, ohne eine Dummy-Schnittstelle zu erstellen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-07 09:13:11752Durchsuche

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

Serialisieren eines Lambda: Eine Lösung ohne Dummy-Schnittstellen

Bei der Java-Programmierung kommt es nicht selten vor, dass Sie auf Szenarien stoßen, in denen Sie Lambda-Ausdrücke serialisieren müssen. Versuche, ein Lambda direkt zu serialisieren, führen jedoch häufig zu einer NotSerializableException.

Betrachten Sie das folgende Beispiel:

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();
    }
}

In diesem Fall löst die Serialisierung des Lambda eine NotSerializableException aus.

Um diese Herausforderung zu meistern, führt Java 8 eine clevere Lösung ein: die Umwandlung eines Objekts in eine Schnittmenge von Typen. Durch das Hinzufügen mehrerer Grenzen zum Typ des Lambda können Sie ihn auf elegante Weise serialisierbar machen:

Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");

Diese Technik ermöglicht es dem Lambda, die Serializable-Schnittstelle automatisch zu erben, sodass es ohne die Notwendigkeit eines „Dummys“ serialisiert werden kann. SerializableRunnable-Schnittstelle.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Lambda-Ausdruck in Java serialisieren, ohne eine Dummy-Schnittstelle zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn