Этот вопрос относится к Как поставить в очередь и вызвать фактические методы .. .Во всяком случае, я решил (в конце концов) пойти с идеей анонимного класса.Проблема заключается в том, что когда я добавляю свой анонимный класс в связанный список, он на самом деле немедленно вызывает execute () ... и этого не должно быть.Execute () должен быть вызван позже.В любом случае, это то, что у меня есть:
private LinkedList<AgentAction> actions;
public boolean blockingSensor;
this.actions.add( new AgentAction(this) {
public void execute() {
//setRotationalVelocity(0);
kinematic.setWheelsVelocity(0,0);
this.agent.setBlockingSensors(false);
this.agent.printLCD("Turn, blocking = "+this.agent.blockingSensor);
}
public Object getValue() {
return null;
}
});
//this is essentially the main()
public void performBehavior()
{
//make sure to only call run() each tick, not every ms
if ( this.oldCounter < getCounter() )
{
if ( !isWorking() )
{
run();
}
this.oldCounter = getCounter();
this.actions.removeFirst().execute();
}
}
abstract class AgentAction
{
SimbadAgent agent;
public AgentAction(SimbadAgent a)
{
this.agent = a;
}
public abstract void execute();
public abstract Object getValue();
}
run () - абстрактный метод, который реализуется дочерним классом.Я просто не уверен, почему он печатает, когда он добавлен, а не выполнен.Я понимаю, что это будет означать, что executeBehavior () на самом деле выполняется несколько раз, а не один раз за такт, но это не так.