Gee*_*eek 4 java serialization findbugs
考虑以下代码:
public class LIMSGrid extends ClientEventSource implements Focusable, FramingBlockWrapper {
//cell that is curently in edit mode
private CellCoord editingCell = null;
//framing block info
private FramingBlock framingBlock;
}
Run Code Online (Sandbox Code Playgroud)
现在ClientEventSource扩展一个实现Serializableinterface 的类。类CellCoord和FramingBlock是POJOS,其中包含大量的getter和setter。FindBugs抱怨editingCell和framingBlock字段说:
这个Serializable类定义了一个非基本实例字段,该实例字段既不是临时的,Serializable的也不是java.lang.Object,并且似乎没有实现Externalizable接口或readObject()和writeObject()方法。如果不可序列化的对象存储在此字段中,则不会正确反序列化此类的对象。
好的,除了说实例字段不是“ java.lang.Object”以外,其他一切都很好。这完全是一种误导,还是我在这里缺少一些基础知识?
我的猜测(但这只是一个猜测)是,如果您引用java.lang.object实例,FindBugs不会触发此警告,因为它认为在这种情况下,您的类是通用容器,可以容纳任何类型的对象(例如Collection) 。
在这种情况下,类的用户有责任确保容器中存储的对象可序列化,如果他希望容器可序列化。(就像并且只有当您将可序列化对象存储在列表中时,ArrayArray才可序列化一样)。