Rumah >Java >javaTutorial >Apakah Perbezaan Antara Pembolehubah `akhir` dan Pembolehubah Akhir Berkesan dalam Java Lambdas?

Apakah Perbezaan Antara Pembolehubah `akhir` dan Pembolehubah Akhir Berkesan dalam Java Lambdas?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 10:37:10935semak imbas

What's the Difference Between `final` and Effectively Final Variables in Java Lambdas?

Akhir lwn. Akhir Berkesan dalam Java Lambdas

Apabila menggunakan lambdas dalam Java 8, pembangun mungkin menghadapi amaran "pembolehubah tempatan yang dirujuk daripada ungkapan lambda mestilah muktamad atau muktamad berkesan." Memahami perbezaan antara kedua-dua konsep ini adalah penting untuk menggunakan lambda dengan betul.

Akhir

Pembolehubah yang diisytiharkan sebagai muktamad tidak boleh ditetapkan semula selepas pemulaan. Ini memastikan kebolehubahan pembolehubah, menghalang potensi ketidakkonsistenan dan ralat. Dalam konteks lambda, pembolehubah akhir menjamin bahawa pembolehubah tersebut kekal konsisten sepanjang pelaksanaan lambda.

Secara berkesan Akhir

Pembolehubah yang tidak diisytiharkan muktamad secara eksplisit tetapi nilainya kekal tidak berubah selepas permulaan dianggap "secara muktamad dengan berkesan." Ini bermakna walaupun pembolehubah itu tidak muktamad secara teknikal, ia berkelakuan sedemikian dalam amalan. Untuk lambda, pembolehubah yang tidak ditetapkan semula dalam skop lambda dianggap muktamad dengan berkesan.

Contoh

Pertimbangkan coretan kod berikut:

int numberLength; // Not final
class PhoneNumber {
    PhoneNumber(String phoneNumber) {
        numberLength = 7; // Assigning to numberLength
        // ...
    }
}

Dalam contoh ini, bilangan pembolehubahLength tidak diisytiharkan muktamad. Walau bagaimanapun, kerana ia tidak pernah ditetapkan semula dalam pembina PhoneNumber, ia adalah muktamad. Oleh itu, ia boleh diakses dengan selamat oleh ungkapan lambda dalam pembina.

Ralat Penyusun

Jika numberLength akan ditugaskan semula dalam pembina, ia tidak lagi muktamad secara berkesan. Ini akan mengakibatkan ralat pengkompil apabila mengaksesnya daripada ungkapan lambda, serupa dengan:

local variables referenced from a lambda expression must be final or effectively final

Kesimpulan

Memahami perbezaan antara muktamad dan muktamad secara berkesan adalah penting untuk penggunaan lambda yang betul di Jawa. Pembolehubah akhir memberikan kebolehubahan, manakala pembolehubah akhir secara berkesan memastikan pembolehubah kekal tidak berubah dalam skop lambda. Dengan mematuhi konsep ini, pembangun boleh mengelakkan kemungkinan ralat dan menulis kod yang mantap dan boleh dipercayai menggunakan lambdas.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Pembolehubah `akhir` dan Pembolehubah Akhir Berkesan dalam Java Lambdas?. 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