Vorwort
Es besteht kein Zweifel, dass Java 8 die wichtigste Version von Java seit Java 5 ist (veröffentlicht im Jahr 2004). Diese Version enthält mehr als ein Dutzend neue Funktionen in Sprachen, Compilern, Bibliotheken, Tools und JVM.
Java 8 ist eine Hauptversion von Java. Einige Leute glauben, dass diese neuen Funktionen, obwohl sie von Java -Entwicklern erwartet werden, aber auch viel Anstrengung erfordert, um zu lernen. Im Folgenden finden Sie Ihnen die Details der neuen Funktionen optional, Standardmethoden und statische Methoden in Java 8. Ohne weiteren ado schauen wir uns die detaillierte Einführung an.
Optional
Die optionale Klasse ( java.util.Optional ) ist eine Containerklasse, die darstellt, ob ein Wert existiert oder nicht existiert. Früher verwendet Null, um anzuzeigen, dass ein Wert nicht existiert. Jetzt kann optional dieses Konzept besser ausdrücken. Und es kann Null -Zeigerausnahmen vermeiden.
Häufige Methoden:
Optional.of(T t) : Erstellt eine optionale Instanz.Optional.empty() : Erstellt eine leere optionale Instanz.Optional.ofNullable(T t) Wenn T nicht null ist, erstellen Sie eine optionale Instanz, andernfalls erstellen Sie eine leere Instanz.isPresent() : Bestimmt, ob der Wert enthalten ist.orElse(T t) : Gibt den Wert zurück, wenn das Anrufobjekt einen Wert enthält, ansonsten t.orElseGet(Supplier s) : Gibt den Wert zurück, wenn das Anrufobjekt einen Wert enthält, andernfalls gibt der durch s erhaltene Wert zurück.map(Function f) Wenn es einen Wert gibt, um es zu verarbeiten, und die verarbeitete optionale zurückgibt, gibt es ansonsten Optional.empty()flatMap(Function mapper) ähnelt der Karte und erfordert, dass der Rückgabewert optional sein muss.Das Folgende ist ein Absatz von ImportNew, um uns mitzuteilen, wie Sie optional korrekt verwendet werden. Schreiben Sie es zum Beispiel nicht so:
public static string getName (user u) {optional <Beus> user = optional.ofnulable (u); if (! user.ipresent ()) return "unbekannt"; return user.get (). Name;}Dieses Umschreiben ist nicht nur nicht präzise, sondern auch die Operation entspricht dem ersten Code. Es ist nichts weiter, als die ISPresent -Methode zu verwenden, um u == null zu ersetzen. Ein solches Umschreiben ist nicht die korrekte Verwendung von optionalem Gebrauch. Lassen Sie es uns erneut umschreiben.
public static String getName (Benutzer u) {return optional.ofnullable (u) .map (user-> user.name) .orelse ("unbekannt");}Dies ist die richtige Möglichkeit, optional zu verwenden. Laut dieser Idee können wir Kettenanrufe mit Seelenfrieden machen, anstatt Urteile für Schicht zu fällen. Schauen Sie sich ein Stück Code an:
public static String getChampionName (Wettbewerb comp) löst illegalArgumentException {if (comp! = null) {compresult result = comp.getResult (); if (result! = null) {user champion = result.getchampion (); if (Champion! = null) {return Champion.getName (); }}} Neue illegalArgumentException werfen ("Der Wert von Param Comp ist nicht verfügbar.");} Aus verschiedenen Gründen (z. B.: Der Wettbewerb hat noch keine Meisterschaft, abnormale Aufrufe der Methode, ein großes Geschenkpaket für die Implementierung einer bestimmten Methode usw.), können wir nicht glücklich comp.getResult().getChampion().getName() . Andere Sprachen wie Kotlin bieten Bediener Segen auf Syntaxebene: comp?.getResult()?.getChampion()?.getName() ?
Mal sehen, wie diese Codes nach optionaler Unterstützung aussehen werden.
public static String getChampionName (Wettbewerbscomp) löst IllegalArgumentException (return optional.ofnullable (comp).
Das ist sehr bequem. Der Charme von Optional ist mehr als das. Optional hat auch einige magische Verwendungen, wie z. B. optional, mit denen die Legalität der Parameter testen kann.
public void setName (String-Name) löst illegalArgumentException aus {this.name = optional.ofnulable (Name) .filter (Benutzer :: isNamevalid) .Orelsethrow (()-> Neue IllegalArgumentException ("Ungültiger Benutzername");};};};};};Die oben genannten Code Referenzen importNew - Java8 So verwenden Sie optional korrekt.
Standard- und statische Methoden in Schnittstellen
Die JAVA8 -Schnittstelle können statische Methoden hinzugefügt werden, oder Standardmethoden können hinzugefügt werden, und die Standardmethoden werden mit Standardmodmethoden geändert.
public interface Fun <T> {Standard void getName () {System.out.println ("Hallo Welt"); } static void getage () {System.out.println ("neun"); }}Wenn eine Schnittstelle eine Standardmethode definiert, definiert eine übergeordnete Klasse ihrer Implementierungsklasse eine Methode mit demselben Namen und der Parameterliste. Wenn dann die Implementierungsklasse aufgerufen wird, wird die Methode in der übergeordneten Klasse ausgeführt.
public class testf {public void getName () {System.out.println ("testf"); }} public interface testinterface {Standard void getName () {System.out.println ("Hallo Welt"); }} public class test erweitert testf implements testInterface {public static void main (String [] args) {test t = neuer Test (); t.getName (); // Die Ausgabe ist testf}}Wenn eine Implementierungsklasse zwei Schnittstellen implementiert, wenn eine übergeordnete Schnittstelle eine Standardmethode bereitstellt und die andere übergeordnete Schnittstelle auch eine Methode mit derselben Namen und der Parameterliste bietet (unabhängig davon, ob die Methode die Standardmethode ist), muss die Methode überschrieben werden, um den Konflikt aufzulösen, andernfalls wird ein Fehler gemeldet.
public interface testInterface {Standard void getName () {System.err.println ("Hello World"); }} public interface testInterface1 {void getName ();} public class test1 implements testInterface, testinterface1 {public void getName () {System.out.println ("TES1F"); }}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.