我怎样才能优雅地序列化lambda?
例如,下面的代码抛出一个NotSerializableException.如何在不创建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();
}
}
Run Code Online (Sandbox Code Playgroud) 我偶然发现了java序列化.我在许多文档和书中都读到静态和瞬态变量无法用Java序列化.我们声明serialVersionUid如下.
private static final long serialVersionUID = 1L;
Run Code Online (Sandbox Code Playgroud)
如果静态变量未被序列化,那么在反序列化过程中我们经常会遇到异常.
java.io.InvalidClassException
Run Code Online (Sandbox Code Playgroud)
其中提取了反序列化对象的serialVersionUID,并与加载的类的serialVersionUID进行比较.
据我所知,我认为如果静态变量无法序列化.这个例外毫无意义.我可能错了,因为我还在学习.
是否存在"java中的静态和瞬态变量无法序列化"的神话.请纠正我,我对这个概念一团糟.