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

Mengapakah `Comparator.reversed()` Menyebabkan Ralat Penyusunan dengan Beberapa Ungkapan Lambda di Jawa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 14:51:14444semak imbas

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

Comparator.reversed() Ketidakserasian dengan Ungkapan Lambda

Apabila cuba mengisih senarai menggunakan ungkapan lambda dan kaedah terbalik() bagi Comparator , ralat kompilasi timbul. Untuk memahami tingkah laku ini, adalah penting untuk menyelidiki selok-belok mekanisme inferens jenis pengkompil.

Pengkompil Java menentukan jenis pembolehubah dalam ungkapan lambda berdasarkan konteks di mana ia digunakan. Dalam kes ini, kaedah isihan menjangkakan hujah jenis Comparator. Apabila menggunakan rujukan kaedah, jenis penerima sudah diketahui, dan hujah lambda disimpulkan dengan sewajarnya. Contohnya:

userList.sort(Comparator.comparing(User::getName).reversed()); // works

Walau bagaimanapun, apabila menggunakan ungkapan lambda secara langsung, pengkompil bergelut untuk membuat kesimpulan jenis pembolehubah dalam lambda. Jenis sasaran untuk lambda ialah Comparator, yang memerlukan Fungsi yang mengambil Pengguna sebagai hujah. Dalam kod berikut, lambda menyimpulkan anda dengan betul sebagai Pengguna:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // works

Walau bagaimanapun, jika tiada rujukan kaedah, pengkompil lalai untuk membuat kesimpulan jenis u sebagai Objek, mengakibatkan ralat penyusunan:

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

Untuk menyelesaikan isu ini, seseorang boleh sama ada menggunakan rujukan kaedah jika boleh atau nyatakan secara eksplisit jenis parameter dalam ungkapan lambda:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed()); // works

Walaupun pengehadan ini boleh mengecewakan, ini adalah akibat daripada mekanisme inferens jenis pengkompil. Penambahbaikan penyusun masa hadapan boleh menangani isu ini.

Atas ialah kandungan terperinci Mengapakah `Comparator.reversed()` Menyebabkan Ralat Penyusunan dengan Beberapa Ungkapan Lambda di Jawa?. 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