0

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

提前致谢!

4

1 回答 1

0

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

于 2013-03-09T22:13:50.017 回答