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!
Erklärung dieser 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
Java8 berechnet das Datum vor einem Jahr oder ein Jahr später mithilfe der minus()-Methode, um das Datum vor einem Jahr zu berechnen packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDate previousYear=today.minus(1,ChronoUni
Jeder weiß, dass es viele Versionen des Win7-Systems gibt, z. B. die Win7-Ultimate-Version, die Win7-Professional-Version, die Win7-Home-Version usw. Viele Benutzer sind zwischen der Home-Version und der Ultimate-Version verwickelt und wissen nicht, welche Version sie wählen sollen. Deshalb werde ich Ihnen heute die Unterschiede zwischen Win7 Family Meal und Win7 Ultimate erläutern. 1. Experience Different Home Basic Edition macht Ihre täglichen Abläufe schneller und einfacher und ermöglicht Ihnen einen schnelleren und bequemeren Zugriff auf Ihre am häufigsten verwendeten Programme und Dokumente. Home Premium bietet Ihnen das beste Unterhaltungserlebnis und macht es einfach, Ihre Lieblingsfernsehsendungen, Fotos, Videos und Musik zu genießen und zu teilen. Die Ultimate Edition integriert alle Funktionen jeder Edition und verfügt über alle Unterhaltungsfunktionen und professionellen Features von Windows 7 Home Premium.
Verstehen Sie die Hauptfunktionen von SpringMVC: Um diese wichtigen Konzepte zu beherrschen, sind spezifische Codebeispiele erforderlich. SpringMVC ist ein Java-basiertes Framework für die Entwicklung von Webanwendungen, das Entwicklern beim Aufbau flexibler und skalierbarer Strukturen durch das Architekturmuster Model-View-Controller (MVC) hilft. Internetanwendung. Wenn wir die wichtigsten Funktionen von SpringMVC verstehen und beherrschen, können wir unsere Webanwendungen effizienter entwickeln und verwalten. In diesem Artikel werden einige wichtige Konzepte von SpringMVC vorgestellt
So berechnen Sie das Datum eine Woche später in Java8. In diesem Beispiel wird das Datum eine Woche später berechnet. Das LocalDate-Datum enthält keine Zeitinformationen. Seine plus()-Methode wird zum Hinzufügen von Tagen, Wochen und Monaten verwendet. Die ChronoUnit-Klasse deklariert diese Zeiteinheiten. Da LocalDate ebenfalls ein unveränderlicher Typ ist, müssen Sie Variablen verwenden, um nach der Rückgabe Werte zuzuweisen. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[
Mit der rasanten Entwicklung des Internets werden Programmiersprachen ständig weiterentwickelt und aktualisiert. Unter ihnen hat die Go-Sprache als Open-Source-Programmiersprache in den letzten Jahren große Aufmerksamkeit erregt. Die Go-Sprache ist so konzipiert, dass sie einfach, effizient, sicher und leicht zu entwickeln und bereitzustellen ist. Es zeichnet sich durch hohe Parallelität, schnelle Kompilierung und Speichersicherheit aus und wird daher häufig in Bereichen wie Webentwicklung, Cloud Computing und Big Data eingesetzt. Derzeit sind jedoch verschiedene Versionen der Go-Sprache verfügbar. Bei der Auswahl einer geeigneten Go-Sprachversion müssen wir sowohl Anforderungen als auch Funktionen berücksichtigen. Kopf
In Golang (Go-Sprache) gibt es kein Konzept einer Klasse im herkömmlichen Sinne, es stellt jedoch einen Datentyp namens Struktur bereit, durch den objektorientierte Funktionen ähnlich wie Klassen erreicht werden können. In diesem Artikel erklären wir, wie Strukturen zur Implementierung objektorientierter Funktionen verwendet werden, und stellen konkrete Codebeispiele bereit. Definition und Verwendung von Strukturen Werfen wir zunächst einen Blick auf die Definition und Verwendung von Strukturen. In Golang können Strukturen über das Schlüsselwort type definiert und dann bei Bedarf verwendet werden. Strukturen können Attribute enthalten
Die drei Merkmale von 5g sind: 1. Hohe Geschwindigkeit; in praktischen Anwendungen ist die Geschwindigkeit des 5G-Netzwerks mehr als zehnmal so hoch wie die des 4G-Netzwerks. 2. Geringe Latenz: Die Latenz des 5G-Netzwerks beträgt etwa zehn Millisekunden und ist damit schneller als die menschliche Reaktionsgeschwindigkeit. 3. Breite Verbindung; die Entstehung des 5G-Netzwerks wird in Kombination mit anderen Technologien eine neue Szene des Internet of Everything schaffen.
C++-Funktionen haben die folgenden Typen: einfache Funktionen, konstante Funktionen, statische Funktionen und virtuelle Funktionen; zu den Funktionen gehören: Inline-Funktionen, Standardparameter, Referenzrückgaben und überladene Funktionen. Beispielsweise verwendet die Funktion „calculeArea“ π, um die Fläche eines Kreises mit einem bestimmten Radius zu berechnen und gibt sie als Ausgabe zurück.