Dieser Artikel führt Sie hauptsächlich in die Verwendung von Funktionsreferenzen im Java8-Lern-Tutorial ein. Der Artikel stellt es ausführlich anhand von Beispielcode vor. Es hat einen gewissen Referenz-Lernwert für alle, die es benötigen Lasst uns gemeinsam lernen.
Vorwort
Im vorherigen Artikel haben wir anhand von Beispielen erklärt, wie Lambda-Ausdrücke definiert und verwendet werden, und im Vergleich zu anderen Sprachen A spezielle Spezifikation von Lambda-Ausdrücken in Java. Und erwähnt: Lambda-Ausdrücke können weiter zu Funktionsreferenzen vereinfacht werden.
In diesem Artikel wird die Verwendung von Funktionsreferenzen vorgestellt. Es gibt nicht viel zu sagen, werfen wir einen Blick auf die ausführliche Einführung.
Typen von Funktionsreferenzen
Funktionsreferenzen werden in die folgenden vier Typen unterteilt:
Statische Funktionen wie die parseInt-Funktion der Integer-Klasse können als Integer::parseInt
Referenzen auf Funktionen auf Objektebene wie die Längenfunktion geschrieben werden der String-Klasse kann als String::length
ein Verweis auf eine Funktion einer bestimmten Instanz geschrieben werden, z. B. getValue einer Instanz mit dem Namen teuerTransaction, geschrieben als expensiveTransaction::getValue
Ein Verweis auf einen Konstruktor
Statische Funktion
Zum Beispiel:
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);
Kann geschrieben werden als:
Function<String, Integer> stringToInteger = Integer::parseInt;
Ein Verweis auf Eine Funktion auf Objektebene
BiPredicate<List<String>, String> contains = (list, element) -> list.contains(element);
kann wie folgt geschrieben werden:
BiPredicate<List<String>, String> contains = List::contains;
Konstruktorreferenz
unten Um ein weiteres Beispiel für einen Konstruktor zu geben, definieren Sie zunächst eine funktionale Schnittstelle, und die einzige Methode get gibt ein Objekt des angegebenen Typs zurück.
@FunctionalInterface public interface Supplier<T> { T get(); }
Supplier<TantanitReader> constructor = () -> new TantanitReader(); TantanitReader tantanitReader = constructor.get();
Der Lambda-Ausdruck des obigen Codes ist neu und gibt ein neues Objekt zurück, wodurch die Konstruktorvariable a wird Konstruktorreferenz auf das Gerät.
entspricht der folgenden Funktionsreferenz:
Supplier<TantanitReader> constructor2 = TantanitReader::new; TantanitReader tantanitReader2 = constructor2.get();
Die obigen Beispiele sind alle ohne Parameter. Im Folgenden wird der Konstruktor weiterhin als Beispiel verwendet Einführen Wenn es Parameter gibt:
public TantanitReader(String loginName) { this.loginName = loginName; }
Function<String,TantanitReader> constructor3 = (loginName) -> new TantanitReader(loginName); TantanitReader tantanitReader3 = constructor3.apply("jack"); Function<String,TantanitReader> constructor4 = TantanitReader::new; TantanitReader tantanitReader4 = constructor4.apply("jack"); TantanitReader tantanitReader5 = constructor4.apply("tom");
Da die Funktion zu diesem Zeitpunkt nur einen Parameter hat, können Sie dies tun Verwenden Sie Javas eigene Funktion. Diese Funktionsschnittstelle hat folgende tatsächliche Funktionen:
R apply(T t);
Funktionen zum Zurückgeben eines Ergebnisses basierend auf einem Parameter. Daraus können wir Konstruktor4 und die entsprechende Funktionsreferenz Konstruktor5 verwenden.
Zusammenfassung
Die Verwendung von Funktionsreferenzen kann nicht nur Lambda-Ausdrücke vereinfachen, sondern sich auch semantisch stärker auf den Methodennamen konzentrieren, d. h. darauf, was zu tun ist und was Die Abstraktionsebene kommt der menschlichen Wahrnehmung näher. Daher sollten nach Möglichkeit Funktionsreferenzen verwendet werden.
Zusammenfassung
Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung von Funktionsreferenzen in Java8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!