Java 奇数链表/匿名类行为-添加时执行?

Java 奇数链表/匿名类行为-添加时执行?,java,linked-list,execution,anonymous-class,first-class-functions,Java,Linked List,Execution,Anonymous Class,First Class Functions,这个问题涉及到。无论如何,我决定(毕竟)采用匿名课堂的想法。问题是,当我将匿名类添加到链表中时,它实际上会立即调用execute()。。。不应该这样。Execute()将在以后调用。无论如何,这就是我所拥有的: private LinkedList<AgentAction> actions; public boolean blockingSensor; this.actions.add( new AgentAction(this) { public void execute()

这个问题涉及到。无论如何,我决定(毕竟)采用匿名课堂的想法。问题是,当我将匿名类添加到链表中时,它实际上会立即调用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();
}
私有链接列表操作;
公共布尔阻塞传感器;
this.actions.add(新代理)(this){
public void execute(){
//设定旋转速度(0);
运动学。车轮摆度(0,0);
本.代理.挫折传感器(false);
this.agent.printLCD(“Turn,blocking=“+this.agent.blockingSensor”);
}
公共对象getValue(){
返回null;
}
});
//这基本上是主要的
公共无效行为()
{
//确保每次勾选只调用run(),而不是每次毫秒
if(this.oldCounter

run()是由子类实现的抽象方法。我只是不知道为什么在添加时打印,而不是执行。我理解这意味着performBehavior()实际上被执行了多次,而不是每次执行一次,但事实并非如此。

细节才是关键。几乎可以肯定的是,您没有显示的代码中有一个bug(我的猜测是
run
),但让我们讨论一个更深的问题。这段代码看起来很像问题所在。如果是这样的话,我建议您检查一下:它充满了与并发相关的优点,这使得像这样的事情比尝试使用自己的方式更容易。对于您的特殊情况,它看起来可能非常适合。如果这不是你真正需要的,我仍然建议你在包裹里翻找;正如我所说,它塞满了方便的东西,可能比您自己从并发原语构建的东西更容易使用。

您的示例代码不会编译。你能不能把它写得完整一点,或者加上一些上下文。。。我不认为实际的代码会有多大帮助,所以让我们看看。。。有一个名为SimbadAgent的类,其中包含performBehavior()以及其他方法。this.actions.add(新代理(this){…});从SimbadAgent内部的一个方法中调用。不幸的是,我不确定我还能提供多少。如果那没什么帮助的话,很抱歉。让我们澄清一下。不,添加操作时,该代码不调用execute。你错了。你有责任证明自己不是这样,但你没有。如果您不愿意花时间向我们提供帮助您所需的信息,祝您好运。读一遍,给我们一个。谢谢汉克@马克·彼得斯:很抱歉,下次我发布代码时,我总会有一个完整的例子。我正在编写的程序依赖于许多其他代码,我正在编写一个较小的测试程序来发布。我有一个。。这是一段很有趣的时间,让事情适当地同时进行,但嘿,我想这就是为什么不容易:)再次感谢。