Can Lamdas Be Serialized?
Java lambdas are not inherently serializable, meaning they cannot be directly written to a stream and later read back. This can pose a challenge when attempting to persist or transmit lambdas across different contexts.
Serialization Conundrum
Consider the following code snippet:
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(); } }
When attempting to serialize the lambda lambda in the above code, a NotSerializableException is thrown. This is because lambdas, by default, are not serializable in Java.
Elegant Lambda Serialization
To resolve this issue and enable lambda serialization, we can leverage the intersection of types feature introduced in Java 8. This allows us to specify multiple bounds for a cast, effectively transforming the lambda into an object that implements both the Runnable and Serializable interfaces.
Here's the updated code that elegantly solves the serialization challenge:
Runnable r = (Runnable & Serializable)() -> System.out.println("Serializable!");
With this solution in place, the lambda can now be seamlessly written to the object stream, persisted to the file system, and later deserialized and executed, without any errors or exceptions.
The above is the detailed content of Can Java Lambdas Be Serialized, and How Can We Make Them Serializable?. For more information, please follow other related articles on the PHP Chinese website!