![](/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.