【问题标题】:Saving blocks of code in variables将代码块保存在变量中
【发布时间】:2012-11-29 13:04:08
【问题描述】:

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

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

在我的游戏中,我有一个 MenuSceneMenuSceneItems。 在这种情况下,我想传递他们应该在被点击时执行的代码。 这样就不需要 switch 语句了。

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

【问题讨论】:

    标签: java eclipse block


    【解决方案1】:

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

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

    【讨论】:

    • 明确一点,这是一个匿名类,而不是匿名函数
    【解决方案2】:

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

    public interface Action {
       void doSomethingWhenPressed();
    }
    

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        相关资源
        最近更新 更多