有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    为什么代码评审忽略了覆盖的缺失

    此外,复制方法不应该如此脆弱。如果您有“不应复制的特定字段”,为什么它们对子类可见

    为什么继承层次如此之深?如果每个需要复制的类型都要实现一个Copyable接口,那么在开发过程中就很难忽略缺少覆盖的情况,也就不需要深入的继承层次结构。那些碰巧继承了getCopy()的合适基实现的类可以通过super.调用它来开始,而那些不只是实现继承的接口方法的类

    不能强迫程序员通过编译器重写具体实现中的方法。代码审查应该能发现这样的错误。如果他们没有,那就和错过的评论者谈谈

    抽象方法的实现更容易捕获,因为如果不捕获,编译器会发出抱怨