您的方法不应该返回 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
成为什么样的人。