如何在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表达式,例如谓词和函数,这将使代码更清晰,但基本上做同样的事情。