Pourquoi Comparator.reversed() échoue avec Lambdas
Lors du tri d'une liste d'objets utilisateur à l'aide de Comparator.comparing avec une expression lambda, un une erreur peut se produire :
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Cela est dû à une limitation dans le mécanisme d'inférence de type du compilateur. Le compilateur a du mal à déterminer le type de l'argument lambda 'u'.
Dans l'exemple suivant, l'utilisation d'une référence de méthode permet au compilateur de déduire le type cible et d'éviter l'erreur :
userList.sort(Comparator.comparing(User::getName).reversed()); // works
La référence de la méthode fournit des informations de type supplémentaires, que le compilateur utilise pour déduire le type de 'u' en tant qu'utilisateur.
Pour éviter l'erreur lors de l'utilisation d'un lambda, vous pouvez spécifier explicitement le type de l'argument lambda :
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
Dans les futures versions du compilateur, ce problème pourrait être résolu et l'erreur pourrait ne plus se produire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!