问题描述
我正在尝试修改传入的对象并返回它:
private Sample modifyObj(Sample obj) {
obj.setValue1("value1");
obj.setValue2("value2");
return obj;
}
这给了我一个错误提示“方法修改参数”。 我试图通过在方法中也有一个本地副本来做到这一点:
private Sample modifyObj(Sample obj) {
Sample obj2 = obj;
obj2.setValue1("value1");
obj2.setValue2("value2");
return obj2;
}
但还是同样的错误。有没有更好的办法?
解决方法
我试图重现您的错误,创建一个 Sample 类:
public class Sample {
private String s1,s2;
public void setValue1(String s1) {
this.s1 = s1;
}
public void setValue2(String s2) {
this.s2 = s2;
}
}
并使用像您这样的方法进行测试
public class proofSemantic {
private Sample modifyObj(Sample obj) {
obj.setValue1("value1");
obj.setValue2("value2");
return obj;
}
public void makeTest() {
Sample obj=new Sample();
modifyObj(obj);
}
public static void main(String[] args) {
proofSemantic proof=new proofSemantic();
proof.makeTest();
}
}
它不会产生任何错误。你可以再详细一点吗?顺便说一句,我不知道这个奇怪的错误。你用的是什么Java机器?什么IDE?
,理想情况下,当您将 object
传递给 method
时,它的引用会被传递,并且在此基础上所做的所有修改都会自动应用于调用者中传递的 object
。所以我想除非你想克隆它,否则没有必要返回它。
private void modifyObj(Sample obj) {
obj.setValue1("value1");
obj.setValue2("value2");
}
和来电者
Sample sample = new Sample();
modifyObj(sample);
//here when you access sample,you will get modified values anyways