はすでにインスタンス変数であるPlan
ため、メソッドはを返すべきではありません。Plan plan
さらに、とにかくインスタンス化しないPlan plan
ので、以下のコードのいずれかを選択する必要があると思います。
最初の部分:Plan plan
インスタンス変数を作成し、それだけを編集、変更、使用します。つまり、このクラスでは、のこのインスタンスにPlans
アクセスできるため、を返す必要はありません。Plan plan
xyz
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;
クラスのコンストラクターを作成することをお勧めします:XYZ
Plan plan
public XYZ(Plan mPlan) {
this.plan = mPlan;
}
または、コンストラクターで初期化します。
public XYZ(ArrayList<Subject> subjects) {
this.plan = new Plan("1", subjects.size(), subjects);
}
どこになりたいか教えてくださいplan
。