Der erste Lambda -Ausdruck
Bevor Lambda erschien, benötigen wir möglicherweise die folgende Methode: Wenn wir ein Multithread schreiben mussten:
Runnable Runnable = new Runnable () {@Override public void run () {System.out.println ("Hallo runnable"); }}; ... Thread.Start ();Das obige Beispiel ist viel einfacher, wenn Sie Lambda verwenden:
Runnable noargs = ()-> system.out.println ("Hallo Lambda! ~"); ... Thread.start ();Ein Lambda -Ausdruck ist eine anonyme Funktion, die Verhaltensweisen wie Daten übergibt. Der Ausdruck verwendet ->, um die Parameter vom Körper zu trennen, ->, um dem Parameterteil vorauszugehen, und dann ist dies der Körperteil.
Andere Formen von Lambda
Binaryoperator <Lang> add = (x, y)-> x+y; // oder binärer <lang> add = (long x, long y)-> x+y; // oder binärer <long> add = (lang x, lang y)-> {x+y; };Die oben genannten sind alle Formen von Lambda -Ausdrücken.
Dann ist die Frage:
Was macht Binaryoperator <Lang> add = (lang x, lang y)-> x+y; bedeuten?
In dieser Codezeile geht es nicht um das Hinzufügen von Zahlen, sondern erstellt eine Funktion, um das Ergebnis des Hinzufügens von zwei Zahlen zu berechnen. Die Art des Adds ist Binaryoperator <Long>, die nicht die Summe von zwei Zahlen ist, sondern der Code, der zwei Zahlen hinzufügt. Das folgende Beispiel zeigt, wie diese Variable verwendet wird:
Binaryoperator <Lang> add = (lang x, lang y)-> x+y; Langes res = add.apply (3l, 4l); System.out.println ("res ="+res); // Ausgabe: res = 7 Funktionsschnittstelle
Eine Funktionsschnittstelle ist eine Schnittstelle mit nur einer abstrakten Methode, die als Art von Lambda -Expression verwendet wird.
Zum Beispiel ist Runnable eine Funktionsinterface.
Erstellen Sie eine neue Funktionsinterface:
öffentliche Schnittstelle Addoperator <t, d> {long add (t eins, d zwei);}verwenden:
Addoperator <lang, lang> addoperator = (x, y)-> x +y; System.err.println ("Benutzerdefinierte Funktion Listener res ="+addOperator.add (34L, 65L)); Zieltyp
Der Zieltyp bezieht sich auf den Typ des Kontextes, in dem sich der Lambda -Ausdruck befindet. Weisen Sie beispielsweise einer lokalen Variablen einen Lambda -Ausdruck zu oder geben Sie ihn als Parameter an eine Methode weiter. Der Typ des lokalen Variablen- oder Methodenparameters ist der Zieltyp des Lambda -Expression.
Finale
Wenn wir auf die lokale Variable in der Methode in der anonymen inneren Klasse verweisen, ist dies erforderlich, dass die lokale Variable endgültig ist.
In Lambda müssen wir die referenzierte externe lokale Variable nicht als endgültig deklarieren, aber die Variable kann nur einmal zugewiesen werden.
Wenn wir im folgenden Beispiel die Kommentare entfernen und den Namen erneut zuweisen, wird er nicht kompiliert und eine Fehlermeldung angezeigt: Lokale Variablen, auf die aus einem Lambda -Ausdruck verwiesen wird, müssen endgültig oder effektiv endgültig sein.
Die lokale Variable, auf die der Lambda -Ausdruck verwiesen wird, muss endgültig oder ein sachliches Finale sein.
String name = getUnername (); // name = "hi"; button.addactionListener (event-> system.out.println ("name ="+name)); Geben Sie Inferenz ein
Der Typ -Inferenz von Lambda -Ausdrücken ist eine Erweiterung der in Java7 eingeführten Zieltyp -Inferenz.
Geben Sie Inferenz in Java7 ein:
Liste <String> list = new ArrayList <> ();
Im obigen Beispiel haben wir den Paradigmentyp ArrayList nicht angegeben, sondern den Paradigmentyp ArrayList basierend auf der Art der Liste abgeleitet.
Zum Beispiel: Addoperator <lang, lang> addoperator = (x, y)-> x +y;
In diesem Artikel hoffe ich, dass es Ihnen helfen kann, diesen Teil des Wissens zu lernen und zu verstehen. Vielen Dank für Ihre Unterstützung für diese Website!