![](/img/trans.png)
[英]A method declaring a mutable data structure as an output and returning an immutable one actually
[英]Sending network data, mutable vs immutable data structure
我正在实现一个网络协议库,它涉及以50Hz的恒定速率发送数据。 实际的数据传输将在一个单独的线程上完成。 作为库的一部分,将有一个表示需要发送的所有数据的类,并且库将负责序列化并传输它。
我的问题是我不确定如何设计这个数据类。 我想到的选项是:
我不确定是否要进行克隆路由,因为必须每秒创建一个新对象并填充50次。
对于克隆选项,我也想知道克隆像这样的对象的最佳方法是什么。 我应该利用Object.clone(),我听说过混合的东西,或者实现自定义复制方法/构造函数? 如果我定制一些东西,那么最强大的实现方法是什么? 基本上,我必须在代码中编写一个接一个地复制源对象的每个字段,我希望有一些更简单的方法。
我会选择一个可变对象和克隆。 如果没有克隆,你就会有潜在的数据损坏,并且使你的类不可变会增加复杂性,这可能是没有根据的。
是的,您的类应该实现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
}
我会使用克隆的可变对象,因为它维护您的原始对象。 使用此解决方案,您可以克隆对象以发送它并修改原始对象以进行下一个发送任务。
克隆机制不应该是一个性能问题,因为克隆每秒50个对象不应该成为任何现代系统的问题(虽然我不知道你在做什么系统)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.