相关疑难解决方法(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万
查看次数

lambda创建后的序列化

我可以使用以下语法序列化lambda:

Runnable r = (Runnable & Serializable) () -> System.out.println("");
try (ObjectOutput oo = new ObjectOutputStream(new ByteArrayOutputStream())) {
  oo.writeObject(r);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我从客户端代码收到lambda并且它没有被正确转换,我就无法序列化它.

如何r在不更改其定义的情况下序列化以下内容:

Runnable r = () -> System.out.println("");
Run Code Online (Sandbox Code Playgroud)

我试图序列化"派生"对象:

Runnable r1 = (Runnable & Serializable) r::run;
Runnable r2 = (Runnable & Serializable) () -> r.run();
Run Code Online (Sandbox Code Playgroud)

但在每种情况下,都oo.writeObject(rxxx);失败了NotSerializableException.

java lambda serialization java-8

13
推荐指数
1
解决办法
1605
查看次数

标签 统计

java ×2

java-8 ×2

lambda ×2

serialization ×2