Search code examples
javalambdajava-8functional-programming

Does lambda expression automatically create new object for its entry parameters?


I am new to functional programming, so far i have understood how to use it, anonymous function etc.

I saw many examples of code where the object needed as parameter in my lambda expression actually doesn't exist in that moment (it isn't instantiated).

For example, is this:

myClass.myMethod(c -> {my overridden code});

the same as this

myClass.myMethod(new String() -> {my overridden code});

considering that c is not declared in my code and myMethod correctly implements a functional interface which abstract method requires a String?

EDIT:

I got some problems with this question: JavaFX ComboBox Image With this part of code:

comboBox.setCellFactory(c -> new StatusListCell());

I can't figure out where c is taken from, it's not declared at all, that's why i was wondering if lambda expressions could create new objects automatically.


Solution

  • c is actually only a placeholder, like a parameter in a method would be (which does not differ from the functioning of the lambda here).

    myClass.myMethod(c -> {my overridden code});
    

    is the equivalent of the following

    myClass.myMethod(new Consumer<String>(){
        @Override
        public void accept(String c) {
            {my overridden code}
        }
    }
    

    So the answer to your question is : No. The lambda represents a method, a function but is not an executable piece by itself, it has to be invoked with outside parameters.