修改并 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 指向其中一个我自己的文章)。
我有这样的代码修改和 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 指向其中一个我自己的文章)。