実行可能ブロックをパラメーターとして静的メソッドに渡す方法はありますか?それは可能ですか?たとえば、私はこの方法を持っています
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では、ラムダを使用して呼び出しコードを簡略化できます:
someMethod(flag, () -> { /* block 1 */ }, () -> { /* block 2 */ });
それでも同じ方法でsomeMethod
を宣言します。ラムダ構文は、Runnable
sを作成して渡す方法を単純化するだけです。
インターフェースを作成し、そのインターフェースを実装するクラスからオブジェクトを渡すだけです。これはコマンドパターンとして知られています。
たとえば、次のようになります。
public interface IBlock
{
void execute();
}
および実装クラス:
public class Block implements IBlock
{
public void execute()
{
// do something
}
}
Java 8では、述語や関数などのラムダ式を渡すことができます。これにより、コードが少しきれいになりますが、基本的に同じことが行われます。