0

getPlanメソッドがあり、オブジェクト(クラスの属性)を変更しようとしています

class XYZ

/**
 * Plan.
 */
private Plan plan;

@Override
public final Plan getPlan() {
    subjects.addAll(plan.getSubjects());
    ...
    return new Plan("1", subjects.size(), subjects);
}

@Override
public final Graph createGraph() {
    Plan fPlan = getPlan();
    ...
    return graph;
}

2番目のメソッドcreateGraphでは、変更されたオブジェクト(fPlan)を取得しようとしましたが、初期状態(Plan plan)になっています。ご理解いただければ幸いです。

前もって感謝します!

4

1 に答える 1

0

はすでにインスタンス変数であるPlanため、メソッドはを返すべきではありません。Plan planさらに、とにかくインスタンス化しないPlan planので、以下のコードのいずれかを選択する必要があると思います。

最初の部分:Plan planインスタンス変数を作成し、それだけを編集、変更、使用します。つまり、このクラスでは、のこのインスタンスにPlansアクセスできるため、を返す必要はありません。Plan planxyz

class XYZ

private Plan plan;

@Override
public final void instantiatePlan() {
    subjects.addAll(plan.getSubjects());
    ...
    plan = new Plan("1", subjects.size(), subjects);
}

@Override
public final Graph createGraph() {
    plan = instantiatePlan();
    ...
    return graph;
}

2番目のオプション:インスタンス変数を削除し、Plan planで、 returnscreateGraph()を呼び出して、そこで変更および編集できます。あなたの文脈によると、私は最初の選択肢を選びます。getPlan()Plan

class XYZ

@Override
public final Plan getPlan() {
    subjects.addAll(plan.getSubjects());
    ...
    return new Plan("1", subjects.size(), subjects);
}

@Override
public final Graph createGraph() {
    Plan fPlan = getPlan();
    ...
    //edit fPlan here.
    return graph;
}

編集:あなたのコメントを見て、私はあなたの問題をさらに理解していません。まず、getPlan()を呼び出しますgetSubjects()Plan plan、インスタンス化されていないため、すぐにNPEがスローされます。2番目:名前が示すことをメソッドに実行させます。したがって、そのメソッドでの編集、変更は行わないでくださいgetPlan()。paramsを使用してreturn plan;クラスのコンストラクターを作成することをお勧めします:XYZPlan plan

public XYZ(Plan mPlan) {
    this.plan = mPlan;
}

または、コンストラクターで初期化します。

public XYZ(ArrayList<Subject> subjects) {
    this.plan = new Plan("1", subjects.size(), subjects);
}

どこになりたいか教えてくださいplan

于 2013-03-09T22:13:50.017 に答える