I can't for the life of me find an explanation of the following:
public static void takesAFunction(Function<String, Void> func) {
func.apply("Hi I'm running a function");
}
public static void takesAConsumer(Consumer<String> func) {
func.accept("Hi I'm running a consumer");
}
public static void main(String[] args) throws Exception {
takesAFunction((String str) -> { System.out.println(str); });
takesAConsumer((String str) -> { System.out.println(str); });
}
I'm using JDK 1.8.0_66 and the line
takesAFunction((String str) -> { System.out.println(str); });
is marked as an error saying that
The method takesAFunction(Function<String,Void>) in the type MyClass
is not applicable for the arguments ((String str) -> {})
I can't understand how is
Function<String, Void>
different from
Consumer<String>
when both return nothing and both take in a single String parameter.
Can someone pls shed some light on this cos it's killing.
Thanks in advance!
A Function<String, Void>
should have the following signature:
Void m(String s);
not to be confused with void m(String s);
!
So you need to return a Void
value - and the only one available is null
:
takesAFunction((String str) -> {
System.out.println(str);
return null;
});
compiles as expected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With