Ciao a tutti! Come da titolo ho un dubbio riguardo alle Lambda Expressions introdotte con l'ultima versione di Java ( Java 8 ), vi posto un codice di esempio per poi porvi la mia domanda :
public class RunnableTest {
public static void main(String[] args) {
System.out.println("=== RunnableTest ===");
// Anonymous Runnable
Runnable r1 = new Runnable(){
@Override
public void run(){
System.out.println("Hello world old style!");
}
};
// Lambda Runnable
Runnable r2 = () -> System.out.println("Hello world with Lambda!");
r1.run();
r2.run();
}
}
Dal codice postato si nota l'utilizzo di una lambda expressions per istanziare l'oggetto di tipo "Runnable r2", ciò che non capisco è COME utilizzando una lambda expressions vuota, che non accetta parametri e creata su due piedi "al volo" il compilatore capisca che sto ISTANZIANDO "r2" ??? Cioè cavolo, quella lambda expression non ritorna alcun valore e non ne accetta alcuno nemmeno in ingresso, quindi non riesco a capire il ragionamento che c'è dietro per poter permetter l'istanziamento e allo stesso tempo la definizione di cosa deve avvenire all'interno del metodo "run( )" tutto in quella istruzione! Spero di essere stato chiaro!