Jak mogę elegancko serializować lambda?Jak serializować lambda?
Na przykład poniższy kod powoduje wyświetlenie NotSerializableException
. Jak mogę to naprawić, nie tworząc interfejsu "fikcyjnego" SerializableRunnable
?
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();
}
}
Chociaż jest to możliwe (patrz selekcja d odpowiedź), każdy powinien chyba dwa razy pomyśleć o zrobieniu tego. Jest oficjalnie ["mocno odradzany"] (https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#serialization) i może mieć [poważne] (http://stackoverflow.com/questions/25443655/możliwość-jawnego-usunięcia-serializacji-wsparcie-dla-a-lambda) [bezpieczeństwo] (https://www.contrastsecurity.com/security-influencers/serialization-must-die-act-1-kryo) [Implikacje] (https://www.contrastsecurity.com/security-influencers/serialization-must-die-act-2-xstream). – David