Boy*_*ame 6 java serialization scala serializable deserialization
我正在尝试使用Java 8 lambdas并且有关于对象序列化的一般问题.例如,如果executor.execute只有一个方法并且在没有序列化的情况下运行代码块,则以下输入将打印5.但是,如果我通过SerializedLambda序列化lambda表达式并将其反序列化,则它会打印null,因为它在此新的反序列化对象中没有前一个上下文.此外,它编译没有任何投诉,因为第一个上下文解决了外部变量.(本例中为finalVar):
final int finalVar = 5;
executor.execute(() -> {
System.out.println(finalVar);
});
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能告诉SerializedLambda将finalVar包含到序列化输出中,而不实现具有finalVar变量字段的接口,并在构造时将其值设置为字段.AFAIK,这是用Java做这种事情最干净的方法:
final int finalVar = 5;
executor.execute(new Runnable() {
int myVar = finalVar;
public void run() {
System.out.println(myVar);
}
);
Run Code Online (Sandbox Code Playgroud)
我甚至不确定这一点,但我认为编译器可以找出外部变量,并在我尝试序列化该lambda时序列化并包含它们.有没有什么技巧可以让Java做这样的事情,还是有任何语言有这样的功能?
归档时间: |
|
查看次数: |
233 次 |
最近记录: |