您的方法不应该返回 a 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;
}
第二种选择:我们删除实例变量Plan plan,在 中createGraph(),我们调用getPlan()with 返回 a 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()on 时Plan plan,它甚至没有被实例化,所以它会立即抛出一个 NPE。第二:让一个方法按照名字告诉你的去做:因此,getPlan()应该只是return plan;,不能多,不能少,不能编辑,在那个方法中修改。我建议XYZ使用 params创建类的构造函数Plan plan:
public XYZ(Plan mPlan) {
this.plan = mPlan;
}
或者在构造函数中初始化它:
public XYZ(ArrayList<Subject> subjects) {
this.plan = new Plan("1", subjects.size(), subjects);
}
请告诉你想plan成为什么样的人。