Mengapa Comparator.reversed() Gagal dengan Lambdas
Apabila mengisih senarai objek Pengguna menggunakan Comparator.comparing dengan ungkapan lambda, ralat mungkin berlaku:
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Ini disebabkan oleh pengehadan dalam pengkompil jenis mekanisme inferens. Pengkompil bergelut untuk menentukan jenis argumen lambda 'u'.
Dalam contoh berikut, menggunakan rujukan kaedah membolehkan pengkompil membuat kesimpulan jenis sasaran dan mengelakkan ralat:
userList.sort(Comparator.comparing(User::getName).reversed()); // works
Rujukan kaedah menyediakan maklumat jenis tambahan, yang digunakan oleh pengkompil untuk membuat kesimpulan jenis 'u' sebagai Pengguna.
Untuk mengelakkan ralat semasa menggunakan a lambda, anda boleh menyatakan secara eksplisit jenis hujah lambda:
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
Dalam keluaran pengkompil akan datang, isu ini mungkin ditangani dan ralat mungkin tidak berlaku lagi.
Atas ialah kandungan terperinci Mengapakah `Comparator.reversed()` Gagal dengan Ungkapan Lambda dalam Pengisihan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!