首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化对象时包括外部变量

序列化对象时包括外部变量
EN

Stack Overflow用户
提问于 2014-12-01 02:54:47
回答 1查看 372关注 0票数 6

我试图使用Java 8 lambdas,并有一个关于对象序列化的一般性问题。例如,如果executor.execute只有一个方法,并在没有序列化的情况下运行代码块,下面的输入将打印5。但是,如果我通过SerializedLambda序列化lambda表达式并反序列化它,它会打印null,因为它在这个新的反序列化对象中没有前面的上下文。此外,它编译时没有任何抱怨,因为第一个上下文解析了外部变量。(本例中为finalVar):

代码语言:javascript
复制
final int finalVar = 5;
executor.execute(() -> {
    System.out.println(finalVar);
});

我想知道是否可以告诉SerializedLambda将finalVar包含到序列化输出中,而不实现一个接口,该接口具有finalVar变量的字段,并在构造时将其值设置为字段。AFAIK,这是在Java中最干净的方法:

代码语言:javascript
复制
final int finalVar = 5;
executor.execute(new Runnable() {
    int myVar = finalVar;

    public void run() { 
         System.out.println(myVar);
    }
);

我甚至不确定,但当我试图序列化lambda时,我认为编译器可以找到外部变量,也可以序列化并包含这些变量。Java是否有任何技巧来做这样的事情,或者是否有任何语言具有这样的特性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-08 19:55:31

不管变量范围如何,只要这些变量的类型是Serializable,序列化的lambda就会包含外部变量。一定要做到这一点,你就可以走了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27221035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档