我有方法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;
}
在第二个方法createGraph中,我尝试获取修改后的对象(fPlan),但它处于初始状态(Plan plan)。我希望你了解情况。
提前致谢!
答案 0 :(得分:0)
您的方法不应该返回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()
并返回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。第二:让一个方法按照名称告诉你的方式执行:因此,getPlan()
应该只是return plan;
,不能更多,不能少,不能编辑,在该方法中进行修改。我建议使用params XYZ
创建类Plan plan
的构造函数:
public XYZ(Plan mPlan) {
this.plan = mPlan;
}
或者在构造函数中初始化它:
public XYZ(ArrayList<Subject> subjects) {
this.plan = new Plan("1", subjects.size(), subjects);
}
请告诉您希望plan
成为什么。