Rumah >Java >javaTutorial >Bilakah Rujukan Kaedah Tidak Bersamaan dengan Ungkapan Lambda?

Bilakah Rujukan Kaedah Tidak Bersamaan dengan Ungkapan Lambda?

DDD
DDDasal
2024-11-04 00:29:30298semak imbas

When is a Method Reference Not Equivalent to a Lambda Expression?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn