我有一个BaseRecord类,它代表一个实现Serializable的DBRecord ..
我需要另一个数据库触发器排序功能,它有自己的数据成员=触发器激活事件数据=>当满意时会插入一个BaseRecord
所以我的问题是
所以......
class BaseRecord implements Serializable
{
...
...
}
class TriggerRecord
{
EventData eventData; //Non-custom Objects
BaseRecord br;
}
所以我的问题
编辑1: 截至目前,TriggerRecord只有1个BaseRecord自定义对象,可能会添加更多..而且本质上TriggerRecord也是另一个映射到DB Record的,它具有eventData和BaseRecord存储的不同格式,因为它存储了多个关系的BaseRecords ..
如果我扩展BaseRecord,那么我将不得不使用super.toString()来访问BaseRecord的字符串表示。 我只是尝试在TriggerRecord中使用BaseRecord的组合..它需要实现Serializable,即使所有数据成员都已经是Serializable ..所以问为什么有必要为其他Custom对象组成的类显式实现Serializable
答案 0 :(得分:0)
据您所知,在Java中:
组合意味着要存在的一个对象实例(A)需要其他对象实例(A1,A2,A3),例如
public class Car {
private Engine engine = null;
private Body body = null;
private List<Tyre> tyres = null;
...
}
如果你没有,你可以实例化Car对象,但它不一致。
序列化正在将一个对象及其依赖对象图写入一个流,即
FileOutputStream fileOut = new FileOutputStream("/tmp/object.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(YOUR_OBJECT_INSTANCE);
out.close();
如果您的对象未实现java.io.Serializable
,则此代码抛出NotSerializableException,
,同样适用于其所有非静态和非瞬态数据成员,依此类推,直到关闭。使用指定的SerialVersionUID
更好,因此JVM不会在运行时计算它。
在你的情况下:
- 在这种情况下我是否应该使用构图?
如果您使用合成,则在TriggerRecord
中必须实施合并EventData
和BaseRecord
的操作方法。
如果TriggerRecord
与BaseRecord
有一些共同的方法,请扩展它并使用覆盖方法。您可以避免代码重复和代码效率低下。
- 并且正在通过网络序列化发送TriggerRecord ArrayList将自动实现为TriggerRecord的所有数据成员 是Serializable还是我需要显式实现Serializable 使用SerialVersionUID?
和以前一样,最好每个班级都有自己的SerialVersionUID
。
如果您添加更多详细信息,我们可以通过其他更好的方式为您提供帮助。