我正在实现一个网络协议库,它涉及以50Hz的恒定速率发送数据。实际的数据传输将在一个单独的线程上完成。作为库的一部分,将有一个表示需要发送的所有数据的类,库将负责序列化并传输它。
我的问题是我不确定如何设计这个数据类。我想到的选项是:
我不确定是否要进行克隆路由,因为必须每秒创建一个新对象并填充50次。
对于克隆选项,我还想知道克隆像这样的对象的最佳方法是什么。我应该利用Object.clone(),我听说过混合的东西,或者实现自定义复制方法/构造函数?如果我定制一些东西,那么最强大的实现方法是什么?基本上,我必须在代码中写一个一个地复制源对象的每个字段,我希望有一些更简单的方法。
答案 0 :(得分:0)
我选择了一个可变对象和克隆。如果没有克隆,你就会有潜在的数据损坏,并且使你的类不可变会增加复杂性,这可能是没有根据的。
是的,您的班级应实施Cloneable
并覆盖Object.clone()
。如果您的任何实例变量类型是可变的,您也应该克隆它们。例如:
class Data implements Cloneable {
private int i; // int type is immutable
private String s; // String type is immutable
private List<String> l; // List type is mutable
@Override
public Data clone() {
try {
Data clone = (Data) super.clone();
clone.l = new ArrayList<String>(l); // copy the mutable list
return clone;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e); // impossible
}
}
// other class members
}
答案 1 :(得分:0)
我会使用克隆的可变对象,因为它维护原始对象。使用此解决方案,您可以克隆对象以发送它并修改原始对象以进行下一个发送任务。
克隆机制不应该是性能问题,因为每秒克隆50个对象对任何现代系统都不应该是一个问题(虽然我不知道你在做什么系统)。