java如何避免在添加新字段时破坏克隆/复制方法?
我有一个简单的复制/克隆方法,对我的应用程序很重要:
@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测试,在原始对象和它的副本之间进行比较,它们对现有字段很有效,但不考虑新字段
# 1 楼答案
为什么代码评审忽略了覆盖的缺失
此外,复制方法不应该如此脆弱。如果您有“不应复制的特定字段”,为什么它们对子类可见
为什么继承层次如此之深?如果每个需要复制的类型都要实现一个
Copyable
接口,那么在开发过程中就很难忽略缺少覆盖的情况,也就不需要深入的继承层次结构。那些碰巧继承了getCopy()
的合适基实现的类可以通过super.
调用它来开始,而那些不只是实现继承的接口方法的类不能强迫程序员通过编译器重写具体实现中的方法。代码审查应该能发现这样的错误。如果他们没有,那就和错过的评论者谈谈
抽象方法的实现更容易捕获,因为如果不捕获,编译器会发出抱怨