修改并 return 传递参数

Modify and return passed parameter

我有这样的代码修改和 return 传递的对象参数。

在我看来,它很像一种糟糕的代码味道。

public class Creator {
  public MyClass create(MyClass param) {

    SomeClass attr1 = createAttr1();
    SomeClass attr2 = createAttr2();
    //... more creation

    param.setAttr1(attr1);
    param.setAttr2(attr2);
    //... set other created attributes.

    return param;
  }
}


public class MyApp {
  public static void main(String[] args) {
    Creator creatorProcesss = new Creator();
    MyClass myClass = new MyClass();
    myClass = creatorProcesss.create(myClass);
  }
}

有没有合适的重构方法?

传递引用时,可以将签名定义为 void 而不是 return 传递相同的引用。或者,您可以 return 基于方法内操作成功的布尔标志。

public class Creator {
  public void create(MyClass param) {

    SomeClass attr1 = createAttr1();
    SomeClass attr2 = createAttr2();
    //... more creation

    param.setAttr1(attr1);
    param.setAttr2(attr2);
    //... set other created attributes.

    return;
  }
}

您可以将方法的 return 类型更改为 void,用法将变为:

creatorProcesss.create(myClass);

或者更好:

creatorProcesss.initialize(myClass);

由于您的方法没有创建新实例,它会初始化传递的实例。

您也可以反转该过程 - 在 MyClass 中有一个 initialize 方法,它接受 Creator 参数并修改当前的 MyClass 实例。

那么你 main 会变成:

Creator creatorProcesss = new Creator();
MyClass myClass = new MyClass();
myClass.initialize(creatorProcesss);

我同意它看起来像一种令人讨厌的代码味道 - 特别是,您通过这样做引入 side-effects

另外,为什么需要创建对象(处于半初始化状态)然后修改?我可能会尝试找到一种方法在尝试使用它之前完全初始化对象 - 可能通过使用工厂或 Builder Pattern (为了全面披露,这个 link 指向其中一个我自己的文章)。