当前位置: 首页 > 面试题库 >

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

翟昊明
2023-03-14
问题内容

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

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 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: 然后可以在使用MyInterface的任何地方替换lambda表达式: 例如,你可以非常快速地创建一个新线程: 并使用方法引用语法使其更加清晰: 如果没有 lambda表达式,则最后两个示

  • 问题内容: 码: 当我尝试: 我在Eclipse中收到错误。 但当: 一切都好。为什么会有这种差异?谢谢。 问题答案: 因为语法是特殊的语法糖,仅在初始化数组变量时才适用。这是因为任务本身缺少类型信息;但是在赋值的特殊情况下,类型是从变量中完全推断出来的。 在第一个示例中,编译器知道您要分配给它(是),因此允许使用此语法。在后者中,您无需初始化变量(并且由于Java类型推断的弱点,它甚至也无法完全

  • 在Python中,我可以很容易地将函数作为参数传递,并在另一个函数内部执行。

  • 问题内容: 我正在尝试制作一个方法,该方法的参数为,等等,然后返回。 我将为该方法提供的所有可能的类均从该方法扩展并具有方法。 我的代码: 致电者: 但是,这根本不起作用。 请问我该怎么做? 问题答案: 我想你想做 希望像这样的东西行得通(我的反思能力真的不是那么好)。

  • 问题内容: 在Objective-C中,我知道如何传递as参数: 但是在Swift中没有更多类型了。 如何在不知道是哪个的情况下将协议作为参数传递? 问题答案: 在您的评论之一中,您说: “我想创建一个方法,该方法返回实现所需协议的类类型的数组。” 您是否尝试过以下方法: 然后使用上述结构: 起作用的棘手部分是“ @objc”,它将协议暴露给目标c运行时,并允许我们传递任何“协议类型”作为参数。

  • 问题内容: 我有一个带有nvarchar参数的存储过程。我希望调用者在使用此SP时提供sql命令的文本。 如何从SP中执行提供的sql命令? 这有可能吗?- 我认为可以使用EXEC进行操作,但需要注意以下几点: 错误,表明它无法通过给定名称找到存储过程。由于它是脚本,因此这显然是准确的,但让我认为它无法按预期工作。 问题答案: 使用: …假设参数是一个完整的SQL查询。如果不: 注意SQL注入攻击