Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Self Executing Anonymous Functions via Lambdas

In javascript, there's the common pattern of creating an anonymous function and immediately invoking it (usually this is called a self-executing anonymous function or an immediately-invoked function expression).

With Java 8 lambdas, is there a standard way to replicate this behaviour? Something like (() -> doSomething())().

This question asks basically the same question, but for Java 7. I'm explicitly looking for constructs which utilize lambdas.

like image 842
Aljoscha Meyer Avatar asked Jun 30 '16 11:06

Aljoscha Meyer


2 Answers

Not without declaring the type as well. Since Java is a statically-typed language, and functions are not first class citizens, the compiler needs to know what type your lambda is. A function can't just be free-floating, it always needs to be associated with either a class or an instance of a class.

Runnable r = () -> {
    System.out.println("Hello world!");
};
r.run();

But: You can cast the lambda to the Runnable type, and give the compiler a hint as to what kind of @FunctionalInterface you're implementing:

((Runnable)() -> {
    System.out.println("Hello world!");
}).run();

Or without the braces, which makes it a one-liner:

((Runnable)() -> System.out.println("Hello world!")).run();

I imagine that's about as close as you'll get!

like image 55
Craig Otis Avatar answered Sep 23 '22 01:09

Craig Otis


What about something like

((Runnable)(() -> System.out.println("Foobar"))).run();
like image 22
Viktor Mellgren Avatar answered Sep 26 '22 01:09

Viktor Mellgren