在Java中需要访问父函数的粘性情况

时间:2009-04-05 20:40:22

标签: java inheritance permissions parent-child parent

我一直在研究Java中的经济模拟器并遇到障碍。我有一个经济类,它拥有 Traders 的向量。每次迭代时,经济类都会调用每个 Trader 来更新()并决定它要放置的交易。 update()函数返回要添加到父 Economy 类中的队列的所需事务。我能够正确实现上述所有内容,但我仍然需要每个 Trader 才能看到他当前打开了多少笔交易。由于交易存储在父 Economy 类中,我应该如何设计代码,以便 Traders 可以访问 Economy 函数和变量?

3 个答案:

答案 0 :(得分:3)

由于Trader类需要访问Economy类的方法,因此正确的方法是向Trader类“注入”Economy的实例。您可以使用构造函数执行此操作:

public Trader(Economy economy) {
    this.economy = economy;
}

或使用二传手:

public void setEconomy(Economy economy) {
        this.economy = economy;
    }

但要小心设计经济舱。对Economy类变量的访问应仅限于类的方法。如果要从外部访问它们,请定义getter和setter。据我了解,交易者应该只从经济中提取信息。他们不应该能够调用修改经济状况的方法。这应该反映在你的设计上。

您也可以考虑定义界面:

interface IEconomy {
  List<Trade> getTrades(Trader trader);
}

并由经济舱实施。然后向交易者注入IEconomy。这很清楚了交易者应该使用的经济部分。

答案 1 :(得分:1)

public class Trader {
    private Economy parent;
    ...
    public Trader(Economy parent, ...) {
        this.parent = parent;
    }
}

现在Trader应该可以访问父经济。

或者:

public onUpdate(Economy parent) { ... }

如果你愿意的话。

答案 2 :(得分:1)

Trader 类中的 update 方法可能需要一个参数,即对 Economy 类的引用,您可以使用< EM>此。然后,经济可以提供提取所需信息所需的方法。