[JAVA] Point 42: Préférez les lambdas aux classes anonymes
42. L'expression Lambda doit être sélectionnée dans une classe anonyme
- Les expressions Lambda doivent être utilisées plutôt que des classes anonymes car elles sont plus concises et claires.
package tryAny.effectiveJava;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class AnonymouseVsLambda {
public static void main(String[] args) {
List<String> words1 = Arrays.asList("apple", "pen", "pineapple");
//Écrivez dans une classe anonyme.
Collections.sort(words1, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
System.out.println(words1);
//Si le type est défini sur Raw, une erreur de compilation se produira.
List<String> words2 = Arrays.asList("banana", "grape", "melon");
//Écrivez dans le style lambda.
Collections.sort(words2, (s1, s2) -> Integer.compare(s1.length(), s2.length()));
System.out.println(words2);
}
}
- Les types de type Lambda peuvent être omis sauf si le code est propre par écriture.
- Contrairement aux classes et méthodes, les expressions lambda n'ont pas de nom ni de documentation, donc les processus qui ne sont pas explicites ou qui ont plus de 4 lignes ne doivent pas être décrits dans les expressions lambda.
- Voici les situations où une classe anonyme est requise.
- Les expressions Lambda ne peuvent être affectées qu'à des types d'interfaces fonctionnelles, utilisez donc des classes anonymes si vous avez besoin d'une interface avec plusieurs méthodes ou d'une instance d'une classe abstraite.
- Ceci dans l'expression lambda fait référence à la classe englobante (classe externe), mais dans la classe anonyme, il fait référence à la classe anonyme elle-même, utilisez donc la classe anonyme si vous avez besoin d'accéder à l'objet fonction lui-même.