在变量中保存代码块

时间:2012-11-29 13:04:08

标签: java eclipse block

在Objective C中你有一个功能块。 您可以在变量中保存代码块并将其作为参数传递。

[objects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    // Enumerating all the objects of an array
}];

在我的游戏中,我有MenuScene MenuSceneItem秒。 在这种情况下,我想传递他们应该执行的代码,如果他们已被点击。 这将消除对switch语句的需要。

有没有办法在Java中有这样的方法或类似的东西?

3 个答案:

答案 0 :(得分:2)

在Java中,您不能拥有需要使用匿名类的匿名功能块:

menuScene.executeWhenClicked(new Runnable() {
  public void run() {
    // do something
  }
});

答案 1 :(得分:1)

这听起来像是直截了当的多态,例如

public interface Action {
   void doSomethingWhenPressed();
}

并实现一个实现上述接口的对象。将其作为论据传递。

您可能会使用匿名类来执行此操作,例如

// this method takes an 'Action' as an argument
passToMethod(new Action() {
   public void doSomethingWhenPressed() {
      System.out.println("Pressed!");
   }
});

答案 2 :(得分:1)

在java中,您创建一个扩展Runnable的对象(它不必具有显式类类型),并将代码块放在run方法中。像这样

    Runnable myDelayedBlockOfCode = new Runnable() {
        public void run() {
            doA();
            doB();
            doC();
        }
    };

如果使用框架,请仔细查看特定于框架的接口,该接口允许您将这些代码块放入框架将调用的任何内容中。