Changes

Java Funkcionális interfész & Lambda

1,553 bytes added, 10:06, 12 August 2022
Constructor Reference
public MyString(String input) {
System.out.println("MyString consturctor is called with input:" + input);
this.input = input;
}
public MyClassUsingFunctionalif(String a) {
System.out.println("MyClassUsingFunctionalif consturctor is called with input:" + a);
this.variable1 = a;
}
public void processVariable2(MyFunction mf) {
System.out.println("MyClassUsingFunctionalif.processVariable2 START");
MyString myString = mf.process(variable1);
System.out.println("MyString instance created by function if call: "+ myString.getInput());
 
System.out.println("MyClassUsingFunctionalif.processVariable2 END");
}
}
Simán megfogjuk a MyString osztályt és a konstruktorára hivatkozunk a '''MyClassUsingFunctionalif.processVariable2(..)''' metódus használatakor.
<source lang="java">
MyClassUsingFunctionalif myClassUsingFunctionalif = new MyClassUsingFunctionalif("process_this_during_functional_if_call");
myClassUsingFunctionalif.processVariable2(MyString::new);
</source>
 
És ez kerül az output-ra:
<pre>
MyClassUsingFunctionalif consturctor is called with input:process_this_during_functional_if_call
MyClassUsingFunctionalif.processVariable2 START
MyString consturctor is called with input:process_this_during_functional_if_call
MyString instance created by function if call: process_this_during_functional_if_call
MyClassUsingFunctionalif.processVariable2 END
</pre>
<br>
 
Tehát az egész '''MyString myString = mf.process(variable1);''' hívást helyettesítette a MyString konstruktor meghívásával. Láthatjuk a log sorrendből is, hogy ebben a sorban:
<pre>
myClassUsingFunctionalif.processVariable2(MyString::new);
</pre>
Még nem példányosodik a MyString osztály. Csak akkor mikor a funkcionális IF meghívásra kerül, de azt simán behelyettesíti egy olyan konstruktor hívással, ami ugyan azokat a paramétereket várja, és a '''::new'''-val megadott osztálynak semmi köze a funkcionális IF-hez (MyFunction), nem implementálja azt.