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

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

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语法只是简化了如何创建和传递Runnable的方法。

您可以简单地创建一个接口,并从实现该接口的类传递对象。 这称为命令模式。

例如,您可以:

 public interface IBlock { void execute(); } 

和实施class:

 public class Block implements IBlock { public void execute() { // do something } } 

在Java 8中,您将能够传递lambda表达式,例如谓词和函数,这将使代码更清晰,但基本上做同样的事情。