Rumah > Java > javaTutorial > Ungkapan Lambda dan pembolehubah penangkapan

Ungkapan Lambda dan pembolehubah penangkapan

Mary-Kate Olsen
Lepaskan: 2025-01-12 06:29:45
asal
657 orang telah melayarinya

Expressões lambda e a captura de variáveis

Akses kepada Pembolehubah dalam Skop Terkandung

  • Ungkapan lambda boleh mengakses:
  • Pembolehubah tika bagi kelas yang mengandungi.
  • Pembolehubah statik ditakrifkan dalam kelas luaran.
  • Parameter ini, yang merujuk contoh panggilan kelas luaran.

Akses kepada Pembolehubah Setempat

  • Apabila menggunakan pembolehubah tempatan skop luaran:
  • Pembolehubah setempat mestilah muktamad dengan berkesan.
  • Secara muktamad dengan berkesan: Pembolehubah yang nilainya tidak berubah selepas ditugaskan.
  • Tidak perlu diisytiharkan secara jelas sebagai muktamad.
  • Mengubah suai pembolehubah setempat (di dalam atau di luar lambda) membatalkan tangkapannya.

Sekatan Pengubahsuaian
Tidak boleh mengubah suai:

  • Pembolehubah setempat yang ditangkap dalam ungkapan lambda.
  • Mengubah suai pembolehubah ini mengalih keluar status muktamadnya dengan berkesan.

Pengubahsuaian Pembolehubah Contoh
Ungkapan lambda boleh:

  • Gunakan dan ubah suai pembolehubah contoh kelas panggilan.
  • Tiada sekatan pada status "akhir" contohnya pembolehubah.

Contoh: Menangkap Pembolehubah Setempat daripada Skop Luaran
Kod:

interface MyFunc {
    int func(int n);
}

class VarCapture {
    public static void main(String args[]) {
        // Variável local que pode ser capturada
        int num = 10;

        MyFunc myLambda = (n) -> {
            // Uso correto da variável num
            int v = num + n;

            // A instrução abaixo é inválida porque tenta modificar num
            // num++;

            return v;
        };

        // Usando a expressão lambda
        System.out.println(myLambda.func(8)); // Exibe: 18

        // Modificar num aqui também causaria erro
        // num = 9;
    }
}

Salin selepas log masuk

Penjelasan:

  • Tangkapan Nombor:
    num adalah muktamad kerana ia tidak ditukar selepas tugasan awal.
    Lambda boleh mengakses nombor, tetapi tidak boleh mengubah suainya.

  • Pelaksanaan:
    myLambda.func(8) mengembalikan 18 kerana:
    num (10) ditambah pada parameter n (8), menghasilkan 18.

  • Ralat disebabkan Pengubahsuaian:
    Menyahkomen num atau num = 9 akan membatalkan tangkapan, menyebabkan ralat kompilasi.

  • Nota:
    Penting: Pembolehubah tika atau statik boleh digunakan dan diubah suai tanpa sekatan dalam ungkapan lambda.
    Sekatan hanya dikenakan pada pembolehubah tempatan skop luaran.

Atas ialah kandungan terperinci Ungkapan Lambda dan pembolehubah penangkapan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan