Soalan:
Di Jawa, apabila menggunakan ungkapan lambda, adakah terdapat cara untuk membandingkan mereka untuk kesaksamaan?
Jawapan:
Dari Perspektif Spesifikasi:
Spesifikasi bahasa hanya menjamin bahawa menilai ungkapan lambda akan menghasilkan contoh kelas yang melaksanakan antara muka fungsi sasaran. Walau bagaimanapun, ia tidak memberikan jaminan tentang identiti atau pengalianan kejadian ini.
Dari Perspektif Pelaksanaan:
Pelaksanaan Java semasa mewujudkan hubungan 1:1 antara sintetik kelas yang digunakan untuk melaksanakan lambdas dan tapak tangkapannya. Jika lambda yang sama dinilai di tapak tangkapan yang sama tanpa menangkap sebarang pembolehubah, tika yang sama dihasilkan dan boleh dibandingkan menggunakan kesamaan rujukan (==).
Untuk lambda boleh bersiri, keadaan mereka boleh diperoleh dengan mudah, tetapi pada kos penurunan prestasi dan keselamatan.
Cabaran dengan Komprehensif Kesaksamaan:
Secara amnya tidak boleh dilakukan untuk menentukan sama ada dua lambda dengan antara muka berfungsi dan fungsi gelagat yang sama adalah sama kerana:
Keupayaan dan Had Semasa:
Rujukan kaedah mungkin mempunyai takrifan kesaksamaan yang boleh disesuaikan pada masa hadapan untuk membolehkan penggunaannya sebagai pendengar.
Kumpulan Pakar Java mempertimbangkan untuk mendedahkan maklumat untuk lebih selektif equals/hashCode dan kaedah deskriptif toString untuk lambdas. Walau bagaimanapun, mereka membuat keputusan untuk menentangnya kerana potensi kesan prestasi ke atas majoriti pengguna.
Dari segi toString, tiada kesimpulan yang pasti dicapai, tetapi hujah telah dibuat untuk kedua-dua pihak, meninggalkan kemungkinan untuk menyemak semula isu ini pada masa hadapan.
Atas ialah kandungan terperinci Bolehkah Ungkapan Lambda Dibandingkan untuk Kesaksamaan di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!