0

私は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 に渡されたのと同じ例を使用して、毎回新しいテストを作成する必要がある場合です。

4

2 に答える 2