Rumah >Java >javaTutorial >Mengapakah `Comparator.reversed()` Menyebabkan Ralat Penyusunan dengan Beberapa Ungkapan Lambda di Jawa?
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
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
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!