Rumah > Java > javaTutorial > Mengapakah `Comparator.reversed()` Menyebabkan Ralat Penyusunan dengan Ungkapan Java Lambda?

Mengapakah `Comparator.reversed()` Menyebabkan Ralat Penyusunan dengan Ungkapan Java Lambda?

Susan Sarandon
Lepaskan: 2024-12-15 06:22:11
asal
193 orang telah melayarinya

Why Does `Comparator.reversed()` Cause Compilation Errors with Java Lambda Expressions?

Perangkap Pengkompil: Comparator.reversed() dan Ungkapan Lambda

Ekspresi Lambda menyediakan cara ringkas untuk menyesuaikan gelagat pengisihan, tetapi apabila digunakan dengan Comparator.reversed(), ralat kompilasi timbul. Ralat ini berpunca daripada ketidakupayaan pengkompil untuk membuat kesimpulan jenis sasaran yang betul untuk lambda.

Memahami Ralat

Pertimbangkan kod sampel berikut:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Salin selepas log masuk

Dalam kes ini, ralat berlaku kerana pengkompil tidak dapat menentukan jenis parameter u dalam lambda ungkapan. Untuk membuat kesimpulan jenis, pengkompil memerlukan jenis sasaran untuk lambda.

Biasanya, jenis sasaran ditentukan oleh konteks di mana lambda digunakan. Dalam baris pertama coretan kod yang anda berikan, jenis sasaran ialah Comparator, memandangkan userList.sort() menjangkakan hujah jenis itu. Ini menyimpulkan anda adalah jenis Pengguna, membenarkan kod untuk menyusun.

Lambda vs. Rujukan Kaedah

Ralat hanya berlaku apabila menggunakan ungkapan lambda. Apabila menggunakan rujukan kaedah (seperti dalam baris kedua coretan kod anda), jenis sasaran disediakan secara eksplisit oleh tandatangan kaedah, menyelesaikan isu inferens jenis.

Menyelesaikan Ralat

Untuk menyelesaikan ralat apabila menggunakan ungkapan lambda, anda boleh memberikan parameter secara eksplisit jenis:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
Salin selepas log masuk

Ini secara jelas menyatakan anda sebagai Pengguna jenis, membenarkan pengkompil untuk membuat kesimpulan jenis sasaran dengan betul.

Kelemahan Penyusun

Ralat yang dipersoalkan menyerlahkan kelemahan dalam mekanisme inferens jenis penyusun. Sebab tepat mengapa kaedah terbalik() mengganggu penaipan sasaran tidak jelas. Penambahbaikan pengkompil masa hadapan boleh menangani isu ini, membenarkan ungkapan lambda digunakan tanpa menaip parameter eksplisit.

Atas ialah kandungan terperinci Mengapakah `Comparator.reversed()` Menyebabkan Ralat Penyusunan dengan Ungkapan Java Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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