类中的属性修改

时间:2013-03-09 21:48:46

标签: java

我有方法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)。我希望你了解情况。

提前致谢!

1 个答案:

答案 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成为什么。

相关问题