我正在尝试了解序列化如何与 Java 及其最新版本一起使用。我正在尝试像这样序列化一个 lambda:
Runnable r = (Runnable & Serializable)() -> {System.out.println("This is a test");};
但我注意到我没有关于缺少serialVersionUID
变量的警告。正常吗?
我知道它将在运行时生成,但强烈建议定义它:https ://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html
如果可序列化类没有显式声明 serialVersionUID,则序列化运行时将根据类的各个方面为该类计算默认的 serialVersionUID 值,如 Java(TM) 对象序列化规范中所述。但是,强烈建议所有可序列化的类都显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对类细节高度敏感,这些细节可能因编译器实现而异,因此可能在反序列化期间导致意外的 InvalidClassExceptions。因此,为了保证在不同的 java 编译器实现中具有一致的 serialVersionUID 值,可序列化的类必须声明一个显式的 serialVersionUID 值。还强烈建议显式 serialVersionUID 声明尽可能使用 private 修饰符,因为此类声明仅适用于立即声明的类——serialVersionUID 字段不能用作继承成员。数组类不能显式声明 serialVersionUID,因此它们始终具有默认计算值,但数组类无需匹配 serialVersionUID 值。
我应该怎么办 ?如何在我的 Lambda 中定义它?
谢谢