Rujukan Kaedah vs Ungkapan Lambda: Meneroka Kesetaraan System.out::println
Apabila menggunakan rujukan kaedah seperti System.out ::println, fungsi pertama menilai System.out dan menangkap nilai yang terhasil dalam ungkapan lambda. Sebagai contoh, lambda bersamaan dengan rujukan kaedah ini ialah:
<code class="java">Consumer<Integer> consumer = System.out::println;</code>
Ungkapan lambda ini berkelakuan serupa dengan kod di bawah:
<code class="java">Consumer<Integer> consumer = new Consumer<Integer>() { @Override public void accept(Integer i) { System.out.println(i); } };</code>
Walau bagaimanapun, kaedah rujukan System.out: :println menawarkan kelebihan berbanding ungkapan lambda kerana ia sentiasa menilai System.out pada masa penyusunan. Dalam kes ungkapan lambda, System.out dinilai setiap kali kaedah digunakan.
Untuk memastikan persamaan yang tepat dengan rujukan kaedah, kod berikut mesti digunakan:
<code class="java">PrintStream printStream = Objects.requireNonNull(System.out); Consumer<Integer> consumer = o -> printStream.println(o);</code>
Di sini, printStream ialah pembolehubah yang menangkap nilai System.out, menjamin bahawa sebarang perubahan berikutnya pada System.out tidak akan menjejaskan pengguna ini.
Atas ialah kandungan terperinci Bilakah Rujukan Kaedah Tidak Bersamaan dengan Ungkapan Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!