相关疑难解决方法(0)

如何序列化lambda?

我怎样才能优雅地序列化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 lambda serialization java-8

152
推荐指数
4
解决办法
4万
查看次数

是否在序列化过程中序列化了静态变量

我偶然发现了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中的静态和瞬态变量无法序列化"的神话.请纠正我,我对这个概念一团糟.

java

36
推荐指数
3
解决办法
4万
查看次数

标签 统计

java ×2

java-8 ×1

lambda ×1

serialization ×1