Search code examples
javascriptjavalambdajava-8functional-programming

Java 8 Lambdas vs Self-executing Functions in JavaScript


In JavaScript, there's the common pattern of creating an anonymous function and immediately invoking it.

Which 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 behavior?

Something like (pseudocode):

(() -> doSomething())()

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


Solution

  • 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!