Heim  >  Artikel  >  Java  >  Einführung in die Verwendung von Funktionsreferenzen in Java8

Einführung in die Verwendung von Funktionsreferenzen in Java8

黄舟
黄舟Original
2017-09-19 10:27:021576Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn