如何在Java中将可执行块作为参数传递?

Kea*_*ale 23 java refactoring code-design

有没有办法将可执行块作为参数传递给静态方法?有可能吗?例如,我有这种方法

public static void someMethod(boolean flag, Block block1, BLock block2) {
    //some other code
    if(flag)
        block1.execute();
    else block2.execute();
    //some other code
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西.它实际上比这更复杂,我只是简化了问题.我正在尝试重构我的项目,我创建了一个包含我的类使用的静态方法的通用实用程序类.

Ted*_*opp 34

你可以使用Runnable对象:

public static void someMethod(boolean flag, Runnable block1, Runnable block2) {
    //some other code
    if(flag)
        block1.run();
    else block2.run();
    //some other code
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        . . .
    }
};
Runnable r2 = . . .
someMethod(flag, r1, r2);
Run Code Online (Sandbox Code Playgroud)

编辑(抱歉,@ Bohemian):在Java 8中,可以使用lambdas简化调用代码:

someMethod(flag, () -> { /* block 1 */ }, () -> { /* block 2 */ });
Run Code Online (Sandbox Code Playgroud)

你仍然someMethod以同样的方式宣布.lambda语法只是简化了如何创建和传递Runnables.

  • +1单帖(非演变),正确答案:) (6认同)