1

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

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

在我的游戏中,我有一个MenuScenewith MenuSceneItems。在这种情况下,如果它们被单击,我想传递它们应该执行的代码。这将消除对 switch 语句的需要。

有没有办法在Java中有办法做到这一点或类似的东西?

4

3 回答 3

2

在 Java 中,你不能有匿名函数块,你需要使用匿名类:

menuScene.executeWhenClicked(new Runnable() {
  public void run() {
    // do something
  }
});
于 2012-11-29T13:08:17.590 回答
1

这听起来像简单的多态性,例如

public interface Action {
   void doSomethingWhenPressed();
}

并且只需实现一个实现上述接口的对象。将其作为参数传递。

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

// this method takes an 'Action' as an argument
passToMethod(new Action() {
   public void doSomethingWhenPressed() {
      System.out.println("Pressed!");
   }
});
于 2012-11-29T13:07:20.827 回答
1

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

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

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

于 2012-11-29T13:08:04.330 回答