当我将 Java 类定义为 Serializable 时,Eclipse 并没有警告我某些成员不是 Serializable,这可能会导致应用程序在 @runtime 时序列化失败。
我找不到任何设置来启用成员验证。
关于如何验证 Serializable 类的成员也是 Serializable 的任何想法?
谢谢
当我将 Java 类定义为 Serializable 时,Eclipse 并没有警告我某些成员不是 Serializable,这可能会导致应用程序在 @runtime 时序列化失败。
我找不到任何设置来启用成员验证。
关于如何验证 Serializable 类的成员也是 Serializable 的任何想法?
谢谢
对不可序列化类型的引用是合法的,该类型最终在运行时指向可序列化对象:
import java.io.Serializable;
public class Test implements Serializable {
private Object data;
public void setData(Object data) {
this.data = data;
}
}
如果你后来写了类似的东西:
Test t1 = new Test();
Test t2 = new Test();
t1.setData("Serializable");
t2.setData(new Object());
序列化 t1 不会有问题,但会在 t2 上崩溃。
假设没有人想出直接在 eclipse 中执行此操作的方法,我会推荐 FindBugs 插件,它有一个规则SerializableIdiom
,我认为应该突出您担心的问题。
如果需要,我可以添加有关规则的更多详细信息。不过,它们很难格式化以便在这里显示,所以我放弃将它们添加到原始答案中