[JAVA] Punkt 42: Bevorzugen Sie Lambdas gegenüber anonymen Klassen
42. Der Lambda-Ausdruck sollte aus einer anonymen Klasse ausgewählt werden
- Lambda-Ausdrücke sollten anstelle von anonymen Klassen verwendet werden, da sie präziser und klarer sind.
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");
//Schreiben Sie in einer anonymen Klasse.
Collections.sort(words1, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
System.out.println(words1);
//Wenn der Typ auf Raw gesetzt ist, tritt ein Kompilierungsfehler auf.
List<String> words2 = Arrays.asList("banana", "grape", "melon");
//Schreiben Sie im Lambda-Stil.
Collections.sort(words2, (s1, s2) -> Integer.compare(s1.length(), s2.length()));
System.out.println(words2);
}
}
- Lambda-Typen können weggelassen werden, es sei denn, der Code ist durch Schreiben sauber.
- Im Gegensatz zu Klassen und Methoden haben Lambda-Ausdrücke keinen Namen oder keine Dokumentation. Daher sollten Prozesse, die nicht selbsterklärend sind oder mehr als 4 Zeilen enthalten, nicht in Lambda-Ausdrücken beschrieben werden.
- Im Folgenden sind die Situationen aufgeführt, in denen eine anonyme Klasse erforderlich ist.
- Lambda-Ausdrücke können nur funktionalen Schnittstellentypen zugewiesen werden. Verwenden Sie daher anonyme Klassen, wenn Sie eine Schnittstelle mit mehreren Methoden oder eine Instanz einer abstrakten Klasse benötigen.
- Dies bezieht sich im Lambda-Ausdruck auf die einschließende Klasse (äußere Klasse), in der anonymen Klasse jedoch auf die anonyme Klasse selbst. Wenn Sie also Zugriff auf das Funktionsobjekt selbst benötigen, verwenden Sie die anonyme Klasse