Pertimbangkan coretan kod berikut:
Consumer<String> lambda1 = s -> {}; Function<String, String> lambda2 = s -> s; Consumer<String> lambda3 = LambdaTest::consume; // but s -> s doesn't work! Function<String, String> lambda4 = LambdaTest::consume;
Mengikut antara muka Pengguna, ia ditakrifkan sebagai batal terima(T t); Oleh itu, seseorang mungkin tertanya-tanya dengan tugasan lambda3 kerana kaedah penggunaan mengembalikan String. Anehnya, lambda4 turut diberikan.
Senario ini dikaitkan dengan reka bentuk fleksibel rujukan kaedah di Java. Ia membenarkan penyesuaian kaedah kepada antara muka berfungsi dengan cara yang sama seperti memanggil kaedah secara langsung. Dalam erti kata lain, seseorang boleh menggunakan sebarang kaedah pemulangan nilai dan mengabaikan nilai yang dikembalikan.
Ungkapan Lambda terdapat dalam dua bentuk:
Ungkapan s -> s tidak serasi batal kerana s bukan pernyataan. Walau bagaimanapun, s -> s.toString() boleh jadi kerana invokasi kaedah ialah pernyataan.
Ungkapan yang boleh digunakan sebagai pernyataan (mengikut Spesifikasi Bahasa Java §14.8) termasuk:
Adalah penting untuk ambil perhatian bahawa borang (arg) -> methodReturningVoid(arg) ialah sahaja borang ungkapan yang tidak serasi dengan nilai.
Atas ialah kandungan terperinci Mengapa Rujukan Kaedah Java dengan Nilai Pulangan Berfungsi dengan Antara Muka `Pengguna`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!