Können Lambdas serialisiert werden?
Java-Lambdas sind nicht von Natur aus serialisierbar, was bedeutet, dass sie nicht direkt in einen Stream geschrieben und später zurückgelesen werden können. Dies kann eine Herausforderung darstellen, wenn Sie versuchen, Lambdas in verschiedenen Kontexten beizubehalten oder zu übertragen.
Serialisierungsrätsel
Bedenken Sie den folgenden Codeausschnitt:
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(); } }
Beim Versuch, das Lambda-Lambda im obigen Code zu serialisieren, wird eine NotSerializableException ausgelöst. Dies liegt daran, dass Lambdas in Java standardmäßig nicht serialisierbar sind.
Elegante Lambda-Serialisierung
Um dieses Problem zu lösen und die Lambda-Serialisierung zu ermöglichen, können wir die Schnittmenge von nutzen Die in Java 8 eingeführte Funktion „Typen“ ermöglicht es uns, mehrere Grenzen für eine Umwandlung anzugeben und so das Lambda effektiv in ein Objekt umzuwandeln, das sowohl „Runnable“ als auch „Serializable“ implementiert Schnittstellen.
Hier ist der aktualisierte Code, der die Serialisierungsherausforderung elegant löst:
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
Mit dieser Lösung kann das Lambda nun nahtlos in den Objektstream geschrieben und in der Datei gespeichert werden System erstellt und später deserialisiert und ausgeführt, ohne Fehler oder Ausnahmen.
Das obige ist der detaillierte Inhalt vonKönnen Java-Lambdas serialisiert werden und wie können wir sie serialisierbar machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!