我有一个关于如何避免对 Java 对象产生副作用的问题。让我们假设我有一个MyObject类的实例MyObject。我想通过一系列方法/命令处理myobject ,并且在每个命令级别,我想用方法/命令计算的内容来丰富myObject 。
这里myObject是一个实例的类:
public class MyObject {
private int resultOfCommand1;
private int resultOfCommand2;
private int resultOfCommand3;
private int resultOfCommand4;
....
....
}
以下是必须通过myObject处理的方法/命令:
private MyObject command1(MyObject myObject) {
return myObject.setRresultOfCommand1(1);
}
private MyObject command2(MyObject myObject) {
return myObject.setRresultOfCommand2(2);
}
private MyObject command3(MyObject myObject) {
return myObject.setRresultOfCommand3(3);
}
private MyObject command4(MyObject myObject) {
return myObject.setRresultOfCommand4(4);
}
所以上面显示的设计确实有副作用,我想避免这样的事情。
谁能告诉我避免副作用的最佳方法?总是制作作为参数传递的对象的副本(在本例中为 myObject),对副本进行更改然后返回它会更好吗?有没有保证多线程安全的最佳方法?
任何帮助,将不胜感激。贺拉斯