How do you pass an executable block as a parameter in Java?

后端 未结 2 1405
悲哀的现实
悲哀的现实 2020-12-28 15:21

Is there a way to pass an executable block as a parameter to a static method? Is it possible at all? For example I have this method

public static void someMe         


        
相关标签:
2条回答
  • 2020-12-28 16:01

    You can simply create an interface and pass objects from classes that implement that interface. This is known as the Command pattern.

    For example, you could have:

    public interface IBlock
    {
       void execute();
    }
    

    and an implementing class:

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

    In Java 8 you will be able to pass lambda expressions such as predicates and functions which will make the code a little cleaner but essentially do the same thing.

    0 讨论(0)
  • 2020-12-28 16:10

    You can use Runnable objects:

    public static void someMethod(boolean flag, Runnable block1, Runnable block2) {
        //some other code
        if(flag)
            block1.run();
        else block2.run();
        //some other code
    }
    

    Then you can call it with:

    Runnable r1 = new Runnable() {
        @Override
        public void run() {
            . . .
        }
    };
    Runnable r2 = . . .
    someMethod(flag, r1, r2);
    

    EDIT (sorry, @Bohemian): in Java 8, the calling code can be simplified using lambdas:

    someMethod(flag, () -> { /* block 1 */ }, () -> { /* block 2 */ });
    

    You'd still declare someMethod the same way. The lambda syntax just simplifies how to create and pass the Runnables.

    0 讨论(0)
提交回复
热议问题