我一直在用Java开发一个经济模拟器,结果遇到了一个障碍。我有一个经济类,它拥有交易员的向量。每次迭代,Economy类都会调用每个Trader来更新(),并决定要进行哪些交易。update()函数返回要添加到父Economy类中的队列中的所需事务。我能够正确地执行上述所有操作,但我仍然需要每个交易者来查看他目前有多少交易。由于交易存储在父级Economy类中,我应该如何设计代码,使Traders能够访问Economic函数和变量?
Java中需要访问父函数的棘手情况
原标题:
最佳回答
由于Trader类需要访问Economy类的方法,正确的方法是将Economy的实例“注入”到Trader类中。您可以使用构造函数执行此操作:
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);
}
并由经济舱执行。然后向交易者注入IEeconomy。这就很明显地说明了交易者应该使用经济的哪些部分。
问题回答
public class Trader {
private Economy parent;
...
public Trader(Economy parent, ...) {
this.parent = parent;
}
}
现在Trader应该可以访问母公司经济。
或者:
public onUpdate(Economy parent) { ... }
如果你愿意的话。
Trader类中的update方法可能有一个参数,即对Economy类别的引用,您可以使用this传递该参数。然后,经济可以提供提取所需信息所需的方法。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding