私はJavaがパラメータを値で渡すことを常に理解していました。デバッグできないように見えるコードがあります。簡略版は次のとおりです。
private isFinished = false;
private int target, count;
public Example(int target){
this.target = target;
}
public void doProcess(int x){
count += x;
}
public boolean isFinished(){
if(x < target){
return false;
} else {
return true;
}
}
private Example example;
public Test(Example e){
this.example = e;
}
public isFinished(){
return e.isFinished();
}
public void doProcess(){
e.doProcess(3);
}
private Example example;
public Generate(Example e){
this.example = e;
}
public void generate(int num){
for(int y=0; y < num; y++){
Test t = new Test(example);
while(t.isFinished == false){
t.doProcess();
}
}
}
Generate クラスは、引数として Example を取ります。この例を使用して、「テスト」に渡します。何が起こっているかというと、Generate.generate() が呼び出されると、最初の反復は適切に機能しますが、各反復で、パラメーターとして渡される例を使用して新しい Test が作成されることになっています。「例」は、doProcess() が呼び出されたときに変更されているように見えます。作成時に Generate に渡されたのと同じ例を使用して、毎回新しいテストを作成する必要がある場合です。