a. Statische Methoden können in der Schnittstelle definiert werden
b. Noch wichtiger ist, dass Methoden in der Schnittstelle geändert und dann Methodenkörper hinzugefügt werden können
2. Warum können wir die Standardmethode nicht verwenden, um die Methoden equal, hashcode und toString zu überschreiben?
Das heißt, die Schnittstelle kann keine Standardimplementierung einer Methode der Object-Klasse bereitstellen. Wenn eine Klasse eine Methode implementiert, hat diese immer Vorrang vor der Standardimplementierung. Sobald alle Schnittstelleninstanzen Unterklassen von Object sind, verfügen alle Schnittstelleninstanzen bereits über nicht standardmäßige Implementierungen von equal/hashCode/toString. Daher ist eine Standardversion davon auf der Schnittstelle nutzlos und wird nicht kompiliert.
3. Funktionale Schnittstelle
Das Kernkonzept ist die funktionale Schnittstelle. Wenn eine Schnittstelle eine einzelne abstrakte Methode definiert, wird die Schnittstelle zu einer funktionalen Schnittstelle. Beispielsweise ist java.lang.Runnable eine funktionale Schnittstelle, da sie nur eine abstrakte Methode definiert:
public abstract void run();
Nach dem Login kopieren
Was ist eine funktionale Schnittstelle? 1. Die Schnittstelle verfügt nur über eine abstrakte Methode. abstrakte Modifikation 2. Die Schnittstelle verfügt nur über eine abstrakte Methode, abstrakte Modifikation. Gleichzeitig enthält es mehrere Standardmethoden, da die Standardmethode standardmäßig geändert und nicht abstrakt ist.
Gleichzeitig wird eine neue Annotation eingeführt: @FunctionalInterface. Sie können es vor eine Schnittstelle setzen, um anzuzeigen, dass es sich bei der Schnittstelle um eine funktionale Schnittstelle handelt. Das Hinzufügen einer Schnittstelle wird nicht kompiliert, es sei denn, Sie schaffen es, sie in eine funktionsfähige Schnittstelle umzuwandeln. Es ist ein bisschen wie @Override, das die Absicht erklärt, es zu verwenden, um zu verhindern, dass Sie es falsch verwenden.
4.Lambdas
Eine sehr wertvolle Eigenschaft funktionaler Schnittstellen ist, dass sie mit Lambdas instanziiert werden können. Hier sind einige Beispiele für Lambdas:
Links ist eine durch Kommas getrennte Liste von Eingaben des angegebenen Typs und rechts ist ein Codeblock mit Rückgabe:
(int x, int y) -> { return x + y; }
Nach dem Login kopieren
Ein Die linke Seite ist eine durch Kommas getrennte Liste der abgeleiteten Typen. Eingabeliste, die rechte Seite ist der Rückgabewert:
(x, y) -> x + y
Nach dem Login kopieren
Die linke Seite ist ein einzelner Parameter des Ableitungstyps, die rechte Seite ist ein Rückgabewert :
x -> x * x
Nach dem Login kopieren
Auf der linken Seite gibt es keine Eingabe (offizieller Name: „Burgerpfeil“), auf der rechten Seite wird ein Wert zurückgegeben:
() -> x
Nach dem Login kopieren
Die linke Seite ist ein einzelner Parameter des abgeleiteten Typs, und rechts ist ein Codeblock ohne Rückgabewert (der void zurückgibt):
x -> { System.out.println(x); }
Nach dem Login kopieren
Statische Methodenreferenz:
String::valueOf
Nach dem Login kopieren
Nichtstatische Methodenreferenz:
Object::toString
Nach dem Login kopieren
Geerbte Funktionsreferenz:
x::toString
Nach dem Login kopieren
Konstruktorreferenz:
ArrayList::new
Nach dem Login kopieren
Sie können einige Funktionsreferenzformate als Abkürzung für andere Lambda-Formate erstellen.
控制流程 (break, early return) -在上面的 forEach例子中,传统的继续方式有可能通过在lambda之内放置 "return;"来实现。但是,没有办法中断循环或者从lambda中通过包含方法的结果返回一个数值。例如:
final String secret = "foo"; boolean containsSecret(Iterable<String> values) {
values.forEach(s -> { if (secret.equals(s)) {
??? // want to end the loop and return true, but can't }});
}
Nach dem Login kopieren
Nach dem Login kopieren
进一步阅读关于这些问题的资料,看看这篇Brian Goetz写的说明:在 Block中响应“已验证例外”Was sind die neuen Funktionen von Java8?
控制流程 (break, early return) -在上面的 forEach例子中,传统的继续方式有可能通过在lambda之内放置 "return;"来实现。但是,没有办法中断循环或者从lambda中通过包含方法的结果返回一个数值。例如:
final String secret = "foo"; boolean containsSecret(Iterable<String> values) {
values.forEach(s -> { if (secret.equals(s)) {
??? // want to end the loop and return true, but can't }});
}
Ordering<String> order = Ordering.from((a, b) -> ...);
CacheLoader<String, String> loader = CacheLoader.from((key) -> ...);
Nach dem Login kopieren
Nach dem Login kopieren
要深入阅读,请参看由 Brian Goetz所做的说明: response to "Allow lambdas to implement abstract classes"。
Was sind die neuen Funktionen von Java8?
翻译于 4年前
2人顶
顶 翻译得不错哦!
java.util.function
Paketzusammenfassung: java.util.function
Als früher Beweis für Comparator und Runnable wurde es definiert Im JDK ist die Schnittstelle zufällig mit Lambdas-Ausdrücken als Funktionsschnittstelle kompatibel. Auf die gleiche Weise können Sie jede funktionale Schnittstelle oder Bibliothek eines Drittanbieters in Ihrem eigenen Code definieren.
Aber es gibt eine spezielle Form der Funktionsschnittstelle, die umfangreich und universell ist und in der vorherigen JD-Karte nicht vorhanden war. Dem neuen Paket java.util.function wurden zahlreiche Schnittstellen hinzugefügt. Hier sind einige davon:
Funktion -T als Eingabe, das zurückgegebene R als Ausgabe
Prädikat -T als Eingabe, der zurückgegebene boolesche Wert als Ausgabe
Consumer - T als Eingabe, eine Aktion ausführen, aber keinen Rückgabewert
Supplier – keine Eingabe, gibt T zurück
BinaryOperator – zwei T als Eingabe, gibt ein T als Ausgabe zurück, nützlich für „Reduzierungs“-Operationen
Diese primitivsten Eigenschaften existieren auch. Sie werden als int, long und double bereitgestellt. Zum Beispiel:
IntConsumer – nimmt int als Eingabe, führt eine Aktion aus und hat keinen Rückgabewert
Hier gibt es einige Leistungsgründe, Die Interpretation vermeidet hauptsächlich Boxing- und Unboxing-Vorgänge während der Eingabe oder Ausgabe.
Warten auf PM
Vor 4 Jahren übersetzt
2 Personen Gefällt mir
Gefällt mirGute Übersetzung!
1
2
3
>
Alle Übersetzungen in diesem Artikel dienen nur zu Lern- und Kommunikationszwecken. Bitte geben Sie beim Nachdruck unbedingt den Übersetzer, die Quelle und den Link an zu diesem Artikel
Unsere Übersetzungsarbeit entspricht der CC-Vereinbarung. Sollten unsere Arbeiten Ihre Rechte verletzen, kontaktieren Sie uns bitte rechtzeitig
Kommentar (85)
Das obige ist der detaillierte Inhalt vonWas sind die neuen Funktionen von Java8?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
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