1. Metode fungsi
Yen antarmuka mung nduweni siji cara , variabel saka jinis antarmuka kasebut bisa diwenehi nilai sing diwenehake dening ekspresi lambda (fungsi lambda). Antarmuka kasebut dikenal minangka antarmuka fungsional (sawise Jawa nambahake dhukungan kanggo fungsi lambda).
Contone, Jawa nduweni antarmuka Consumer<Type>
, sing nduweni accept(Type obj)
metode. Napa antarmuka iki dibutuhake?
Ing Jawa 8, koleksi duwe metode, singforEach()
ngidini sampeyan nindakake sawetara tumindak kanggo saben unsur koleksi . Lan ing kene antarmuka fungsional digunakake kanggo ngirim tumindak menyang metode kasebut.Consumer<T>
forEach()
Mangkene carane sampeyan bisa nampilake kabeh unsur koleksi :
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "Hello", "how's", "life?");
list.forEach( (s) -> System.out.println(s) );
Compiler bakal ngowahi kode ing ndhuwur dadi kode ing ngisor iki:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "Hello", "how's", "life?");
list.forEach(new Consumer<String>()
{
public void accept(String s)
{
System.out.println(s));
}
});
Versi pisanan mesthi luwih cendhek tinimbang sing kapindho. Lan nalika kode karo ekspresi lambda angel diwaca, kode karo kelas batin anonim kadhangkala luwih angel diwaca.
2. Referensi metode
Nanging, kode ekspresi lambda kita bisa ditulis luwih cendhek.
Pisanan, sampeyan bisa ngilangi tanda kurung ing sekitar s
parameter:
list.forEach( (s) -> System.out.println(s) );
list.forEach( s -> System.out.println(s) );
Iki mung bisa ditindakake yen ana siji parameter . Yen ana pirang-pirang parameter, mula sampeyan kudu nggunakake tanda kurung .
Lan kapindho, sampeyan bisa nulis kaya iki:
list.forEach( System.out::println );
Iki minangka notasi sing padha. Elinga yen ora ana tanda kurung sawise println
.
Ing kene kita duwe kode sing padha - telpon metode:
object::method
x -> object.method(x)
Coba pikirake: kita pengin nindakake sawetara tumindak kanggo saben unsur koleksi list
. Yen tumindak iku telpon fungsi siji (kayata println()
), banjur nggawe raos mung pass fungsi kanggo cara minangka parameter.
Nanging kepiye carane nerangake kompiler yen kita pengin ngliwati metode kasebut tinimbang nelpon? Kanggo nindakake iki, tinimbang operator titik, kita nggunakake rong titik loro sadurunge jeneng metode. Titik titik siji wis digunakake kanggo nunjukake operator ternary.
Iki minangka notasi sing paling gampang lan kompak.
3. Konstruktor
Referensi metode kanthi titik loro banget migunani nalika kita nggarap aliran I / O. Sampeyan bakal weruh iki sethitik mengko.
Ing sawetoro wektu, ayo ngomong babagan 3 cara populer kanggo ngliwati referensi metode:
Referensi kanggo metode obyek
Kanggo ngliwati referensi menyang metode obyek, sampeyan kudu nulis kaya . Kode iki padha karo .object::method
x -> object.method(x)
Khusus this
lan super
variabel bisa digunakake minangka obyek.
Referensi kanggo metode kelas
Kanggo ngliwati referensi menyang cara statis, sampeyan kudu nulis kaya . Kode iki bakal diowahi dadi kode kayaclass::method
x -> class.method(x);
Referensi kanggo konstruktor
A konstruktor tumindak padha kanggo cara kelas statis, supaya sampeyan uga bisa pass referensi kanggo konstruktor a. Iki carane katon: .class::new
Contone, sampeyan bisa ngubengi jinis erasure kanggo koleksi lan ngliwati metode toArray()
referensi menyang konstruktor sing bakal nggawe array sing dikarepake:toArray(int[]::new);
GO TO FULL VERSION