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

标签 java refactoring

有没有办法将可执行 block 作为参数传递给静态方法?有可能吗?比如我有这个方法

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

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

最佳答案

你可以使用 Runnable 对象:

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

然后你可以调用它:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        . . .
    }
};
Runnable r2 = . . .
someMethod(flag, r1, r2);

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

someMethod(flag, () -> { /* block 1 */ }, () -> { /* block 2 */ });

您仍然会以相同的方式声明 someMethod。 lambda 语法只是简化了如何创建和传递 Runnables。

关于java - 如何在 Java 中将可执行 block 作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582807/

相关文章:

java - 如何自动设置chromedriver路径?

java - 升级后,@MapsId 在保存现有实体时抛出错误,但在其他方面工作正常

java - 重构一个长 servlet 条件

c# - 捕获特定异常

json - Terraform 中的参数化 YAML 模板

javascript - ES6 将所有名称过滤为一个函数

java - 错误消息 = 所需的 MultipartFile 参数 'file' 不存在

java - token "class"上的语法错误

Java PL/SQL 'Execute Immediate'

Java - 将文件扫描仪与用户输入扫描仪结合起来