lambda的序列化

Che*_*tah 3 java lambda serialization java-8

我正在搞乱lambdas的Java序列化.

我有两个完全独立的项目,其中包含一个类.

项目1:

class TestMain {

    public static void main(String[] args) {
        Runnable r = (Runnable & Serializable) () -> {};

        // Serialize r to C:/file.ser;
    }
}
Run Code Online (Sandbox Code Playgroud)

项目2:

class TestMain2 {

    public static void main(String[] args) {
        // Deserialize C:/file.ser to runnable;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在尝试反序列化runnable时,它会抛出一个异常,说它无法找到 TestMain

......有什么办法可以避免这种情况吗?

Ste*_*n C 5

解决方案是TestMain在反序列化时包含在类路径中.

lambda隐含地依赖于声明它的外部类.

此外,Java Tutorial说:

但是,与内部类一样,强烈建议不要对lambda表达式进行序列化.


除此之外......正如@Tim所指出的......即使你不需要该TestMain.class文件,你仍然需要TestMain$xxx.class包含lambda代码的文件.