Comparator.reversed() Incompatibilité avec les expressions Lambda
Lors de la tentative de tri d'une liste à l'aide d'expressions lambda et de la méthode reverse() de Comparator , une erreur de compilation se produit. Pour comprendre ce comportement, il est crucial d'approfondir les subtilités du mécanisme d'inférence de type du compilateur.
Le compilateur Java détermine le type de variables dans les expressions lambda en fonction du contexte dans lequel elles sont utilisées. Dans ce cas, la méthode de tri attend un argument de type Comparator
userList.sort(Comparator.comparing(User::getName).reversed()); // works
Cependant, lors de l'utilisation directe d'expressions lambda, le compilateur a du mal à déduire le type de la variable dans le lambda. Le type cible pour le lambda est Comparator
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // works
Cependant, en l'absence de références de méthode, le compilateur déduit par défaut le type de u en tant qu'objet, ce qui entraîne l'erreur de compilation :
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Pour résoudre ce problème, on peut soit utiliser des références de méthode si possible, soit spécifier explicitement le type de paramètre dans le lambda expression :
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed()); // works
Bien que cette limitation puisse être frustrante, elle est une conséquence du mécanisme d'inférence de type du compilateur. Les futures améliorations du compilateur pourraient résoudre ce problème.
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!