オブジェクトをコピーしようとしていますが、元のオブジェクトを変更せずに変更されます。
私はこの解決策を見つけましたが、最良のアプローチはコピーコンストラクターであるように思われました-私の理解では、これによりディープコピー(元のオブジェクトとは完全に別のオブジェクト)が得られます。
だから私はそれを試しました。ただし、次のコードを実行すると、コピー元の以前のすべてのオブジェクトに影響があることに気付きました。surveyCopy.take()
内の値を変更するを呼び出すと、 Survey
selectedSurvey 内の値も変更されます。
public class MainDriver {
...
//Code that is supposed to create the copy
case "11": selectedSurvey = retrieveBlankSurvey(currentSurveys);
Survey surveyCopy = new Survey(selectedSurvey);
surveyCopy.take(consoleIO);
currentSurveys.add(surveyCopy);
break;
}
そして、ここに私のコピーコンストラクターのコードがあります:
public class Survey implements Serializable
{
ArrayList<Question> questionList;
int numQuestions;
String taker;
String surveyName;
boolean isTaken;
//Copy constructor
public Survey(Survey incoming)
{
this.taker = incoming.getTaker();
this.numQuestions = incoming.getNumQuestions();
this.questionList = incoming.getQuestionList();
this.surveyName = incoming.getSurveyName();
this.isTaken = incoming.isTaken();
}
}
では、問題は正確には何ですか?コピーコンストラクターはそのように機能しませんか? コードの書き方が悪いのでしょうか?