はすでにインスタンス変数である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。