我有一個簡單的複製/ clone方法那就是我的應用程序重要:如何在添加新字段時避免破解克隆/複製方法?
@Override
public Operation getCopy() {
Operation copy = new Operation();
copy.year = this.year;
copy.stage = this.stage;
copy.info = this.info;
copy.user = this.user.getCopy();
// NOT TO BE COPIED! copy.id = this.id;
...
return copy;
}
注意,有一些不應該被複制了一些具體領域。還有一些複雜的對象(如用戶)有自己的複製方法。
的問題是,由於新代碼開發的,有時開發人員創建應該複製一個新的領域,但他忘了將它添加到copy
方法:
private String additionalInfo;
而且即使沒有一個編譯錯誤,這是一個業務問題,只有我們的QA團隊甚至用戶纔會發現。
我能做些什麼來防止這種情況發生?我已經嘗試過使用原始對象和其副本進行比較的JUnit測試,並且它們適用於現有字段,但它們不佔用新字段。
面對變化,這種方法極其不穩定。測試'assertEquals(複製,原始,「複製失敗」);'通常就足夠了。 –
@LewBloch,除了依賴equals檢查所有的字段。 –
只有那些需要建立平等的人。如果這個狀態是由其他領域決定的,那麼他們應該用「等」來解釋。 –