java - Java 中需要访问父函数的棘手情况

标签 java inheritance permissions parent-child parent

我一直在用 Java 开发经济模拟器,但遇到了障碍。我有一个 Economy 类,它拥有一个 Traders vector 。每次迭代,Economy 类都会调用每个 Trader 来 update() 并决定要进行哪些交易。 update() 函数返回要添加到父 Economy 类中的队列中的所需事务。我能够正确实现上述所有内容,但我仍然需要每个交易者能够看到他当前未平仓的交易数量。由于交易存储在父 Economy 类中,我应该如何设计代码,以便 交易者 能够访问 Economy 函数和变量?

最佳答案

由于 Trader 类需要访问 Economy 类的方法,因此正确的方法是将 Economy 的实例“注入(inject)”到 Trader 类中。您可以使用构造函数来做到这一点:

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

或者使用 setter :

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

但是要小心正确设计经济舱。对经济类变量的访问应仅限于该类的方法。如果您想从外部访问它们,请定义 getter 和 setter。据我了解,交易者应该只从经济体中提取信息。他们不应该能够调用修改经济状态的方法。这应该反射(reflect)在您的设计中。

您还可以考虑定义一个接口(interface):

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

并由经济舱实现。然后向 Trader 注入(inject) IEconomy。这非常明显地表明交易者应该使用经济的哪些部分。

关于java - Java 中需要访问父函数的棘手情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719646/

相关文章:

c++ - 使用非虚覆盖隐藏虚函数

Android 6 Permissions => 禁用权限并返回应用程序时崩溃

java - Spring 集成1.0 RC2 : Streaming file content?

java - 枚举到字符串的转换

java - 正则表达式测试器找到所有 4 个匹配项,而 Java 代码仅找到 3 个匹配项

c++ - 在派生类中调用 sizeof(*this)

python - 在 Python 中是否可以声明必须重写该方法?

php - 根据权限在 Laravel 侧边栏中管理

android - 运行时权限检查许可 Android M

Java - 您可以从父类(super class)继承并拥有引用基类而不是父类的静态构造函数吗?