Convert from Boolean to BooleanSupplier

1k Views Asked by At

I have this function a:

public void a(BooleanSupplier param){}

that is called by function b:

public void b(Boolean param){
   a(param)
}

The problem is that function "a" is expecting a BooleanSupplier but function b is sending a Boolean. I think I should convert a Boolean into a BooleanSupplier but I could not manage to convert one to another.

1

There are 1 best solutions below

4
Turing85 On BEST ANSWER

Let us take a closer look at the BooleanSupplier-interface. This is a functional interface, i.e. it has only one abstract method boolean getAsBoolean(). As we can see, the method has no parameters and returns a boolean.

Now let us look at the code presented. Method b receives one parameter Boolean param. method a receives one parameter of type BooleanSupplier. How can we convert the Boolean received by b to a BooleanSupplier? We just need to create a lambda that - when called - returns param. When written as lambda, this looks as follows:

only expression in the lambda -> return-value
        ^
        |
() -> param;
 |
 v
empty parameter list

The minor type mismatch between Boolean (type of param) and boolean (expected return-type of BooleanSupplier) is resolved through autoboxing (oracle.com).

So in total, we can now call a as follows:

a(() -> param);

For further information on lambdas and their syntax, I recommend reading a tutorial on the topic, e.g. this one from oracle.com.