有没有办法将可执行块作为参数传递给静态方法?有可能吗?例如,我有这个方法
public static void someMethod(boolean flag, Block block1, BLock block2) {
//some other code
if(flag)
block1.execute();
else block2.execute();
//some other code
}
或类似的东西。它实际上比这更复杂,我只是简化了问题。我正在尝试重构我的项目,并创建了一个包含我的类使用的静态方法的通用实用程序类。
答案 0 :(得分: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
}
然后你可以用:
来调用它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
s。
答案 1 :(得分:0)
您可以简单地创建一个接口,并从实现该接口的类传递对象。这称为命令模式。
例如,您可以:
public interface IBlock
{
void execute();
}
和实施班:
public class Block implements IBlock
{
public void execute()
{
// do something
}
}
在Java 8中,您将能够传递lambda表达式,例如谓词和函数,这将使代码更清晰但基本上做同样的事情。