因此,我试图建立一个具有一般功能的界面,由一个子类取代,但我找不到这样做的途径。
我认为,一部法典将更加明确:
interface Agent<A extends Agent<A>> {
<W extends World> Iterable<Action<A,W>> percepts(W world);
<W extends World> void takeAction(Action<A,W> action, W world);
}
abstract class StrategistAgent<A extends StrategistAgent<A>> implements Agent<A> {
abstract public <W extends World> AgentStrategy<A,W> getStrategy();
abstract public <W extends World> void setStrategy(AgentStrategy<A,W> strategy);
@Override
<W extends World> Iterable<Action<A,W>> percepts(W world) {
return getStrategy().run(this, world);
}
}
interface AgentStrategy<A extends StrategistAgent<A>, W extends World> {
Iterable<Action<A,W>> run(A agent, W world);
void init(A agent, W world);
}
错误: 理论法(A、世界)不适用于论点(战略代理人,W)。
但我不能写:
StrategistAgent<A extends StrategistAgent<A>, W extends World>
http://www.un.org。 Ok I遵循Mark Peters的建议,删除了固定战略方法。 现在应该工作。