Inhaltsverzeichnis
1. Optional
2. Verwendung von Lambda-Ausdrücken
3. Design für Lambda-Ausdrücke
4. Stream
Endlich
Heim Java javaLernprogramm Top-Tipps für die Java 8-Entwicklung

Top-Tipps für die Java 8-Entwicklung

Feb 23, 2017 am 10:39 AM
java8

Ich programmiere seit einigen Jahren in Java 8, sowohl für neue Anwendungen als auch für die Migration vorhandener Anwendungen, und es fühlte sich an, als wäre es an der Zeit, über einige „Best Practices“ zu schreiben, die ich als sehr nützlich empfunden habe. Ich persönlich mag den Begriff „Best Practices“ nicht, weil er eine „Einheitslösung“ impliziert, und so funktioniert Codierung nicht – wir müssen selbst herausfinden, welche Lösungen funktionieren. Aber ich habe im Java 8-Code einige Optionen gefunden, die uns helfen können, schauen wir uns das an.

1. Optional

Optional ist eine stark unterschätzte Funktion und hat das Potenzial, viele NullPointerExceptions zu beseitigen, die uns stören. Dies ist besonders innerhalb von Codegrenzen nützlich (entweder die verwendete API oder die offengelegte API), da Sie und Ihr aufrufender Code so überlegen können, was Sie erwartet.

Die Anwendung von Optional ohne Überlegung und Design kann jedoch Auswirkungen auf eine große Anzahl von Klassen haben und zu einer schlechteren Lesbarkeit führen. Hier finden Sie einige Tipps, wie Sie Optional effektiv nutzen können.

Optional sollte nur für Rückgabetypen verwendet werden

... nicht für Parameter, nicht für Felder. Glücklicherweise können Sie mit IntelliJ IDEA eine Überprüfung aktivieren, um zu sehen, ob Sie diese Empfehlungen befolgen.

Top-Tipps für die Java 8-Entwicklung

Optionale Werte sollten dort behandelt werden, wo sie vorkommen. Die Vorschläge von IntelliJ IDEA verhindern Optional-Lecks in Ihrem Code. Denken Sie also daran, Optional überall dort zu behandeln, wo Sie es finden, und handeln Sie schnell.

Top-Tipps für die Java 8-Entwicklung

sollte nicht einfach get() aufrufen

Die Funktion von Optional besteht darin, auszudrücken, dass dieser Wert möglicherweise leer ist, und Sie damit umgehen zu lassen Situation . Überprüfen Sie daher unbedingt, ob ein Wert vorhanden ist, bevor Sie etwas damit unternehmen. Ein einfacher Aufruf von get() ohne vorherige Überprüfung von isPresent() kann irgendwann zu einem Nullzeiger führen. Glücklicherweise verfügt IntelliJ IDEA auch über Kontrollen, die Sie daran erinnern.

Top-Tipps für die Java 8-Entwicklung

Es könnte einen eleganteren Weg geben

Das isPresent() in Kombination mit get() wäre sicherlich großartig ...

Top-Tipps für die Java 8-Entwicklung

…aber es gibt elegantere Lösungen. Sie können orElse verwenden, um eine Alternative anzugeben, falls der Wert null ist.

Top-Tipps für die Java 8-Entwicklung

…oder Sie können orElseGet verwenden, um anzugeben, welche Methode aufgerufen werden soll, wenn der Wert null ist. Dies scheint mit dem obigen Beispiel identisch zu sein, aber die Lieferantenmethode wird nur bei Bedarf aufgerufen. Wenn es sich also um eine teure Methode handelt, ist die Leistung mit einem Lambda besser.

Top-Tipps für die Java 8-Entwicklung

2. Verwendung von Lambda-Ausdrücken

Lambda-Ausdrücke sind eine der Hauptfunktionen von Java 8. Auch wenn Sie Java 8 noch nicht verwendet haben, verfügen Sie wahrscheinlich inzwischen über ein grundlegendes Verständnis davon. Sie stellen eine neue Art der Programmierung in Java dar und es ist noch nicht klar, was „Best Practices“ sind. Hier sind einige Richtlinien, denen ich gerne folge.

Fassen Sie es kurz

Funktionale Programmierer werden mit längeren Lambda-Ausdrücken zufriedener sein, aber diejenigen, die schon seit vielen Jahren in Java vertieft sind, können es tun Finden Sie es einfacher, Lambda-Ausdrücke auf nur wenige Codezeilen zu beschränken. Möglicherweise möchten Sie es sogar lieber auf eine einzige Codezeile beschränken und längere Ausdrücke problemlos in eine Methode umwandeln.

Top-Tipps für die Java 8-Entwicklung

Diese können sogar zu Methodenreferenzen werden. Methodenverweise wirken zunächst vielleicht etwas ungewohnt, aber es lohnt sich tatsächlich, sich an Methodenverweise zu halten, da sie in bestimmten Situationen die Lesbarkeit erleichtern, auf die ich später noch eingehen werde.

Top-Tipps für die Java 8-Entwicklung

Explizit

Typinformationen fehlen in Lambda-Ausdrücken, daher ist es möglicherweise hilfreich, Typinformationen für Parameter einzubeziehen.

Top-Tipps für die Java 8-Entwicklung

Wie Sie sehen, wird es dieses Mal ziemlich ungeschickt. Deshalb gebe ich den Parametern lieber einen sinnvollen Namen. Unabhängig davon, ob Sie dies getan haben oder nicht, können Sie mit IntelliJ IDEA natürlich die Typinformationen der Parameter anzeigen.

Top-Tipps für die Java 8-Entwicklung

Sogar die durch Lambda dargestellte Funktionsschnittstelle:

Top-Tipps für die Java 8-Entwicklung

3. Design für Lambda-Ausdrücke

Ich denke, Lambda-Ausdrücke sind ein bisschen wie Generika – zusammen mit Generika verwenden wir sie oft (zum Beispiel beim Hinzufügen von Typinformationen zu einer Liste<>), aber besser können wir eine Methode oder eine Methode mit Generika entwerfen. Eine Typklasse ( z.B. Person<T>). Wenn wir beispielsweise die Streams-API verwenden, würden wir ebenfalls einen Lambda-Ausdruck übergeben, aber noch besser ist es, eine Methode zu erstellen, die einen Lambda-Parameter erfordert.

Aber wenn Sie sich in dieser Situation befinden, finden Sie hier einige tolle Tipps.

IntelliJ IDEA kann Ihnen bei der Einführung funktionaler Parameter helfen

Damit können Sie einen Parameter erstellen, bei dem jemand ein Lambda anstelle eines Objekts übergeben würde. Der Vorteil dieser Funktion besteht darin, dass sie zeigt, dass die vorhandene funktionale Schnittstelle der Spezifikation entspricht.

Top-Tipps für die Java 8-Entwicklung

Dies führt dazu...

Nutzung vorhandener funktionaler Schnittstellen

Je Entwickler immer vertrauter werden Da wir uns mit Java 8-Code beschäftigen, wissen wir, was passiert, wenn Schnittstellen wie Supplier und Consumer verwendet werden, und wie das Erstellen eines lokalen ErrorMessageCreator (zum Beispiel) verwirrend und verschwenderisch sein kann. Schauen Sie sich dieses Paket an, um zu sehen, was bereits verfügbar ist.

@FunctionalInterface zur Funktionsschnittstelle hinzufügen

Wenn Sie wirklich Ihre eigene Funktionsschnittstelle erstellen müssen, markieren Sie sie mit dieser Anmerkung als solche. Dies scheint zwar keine große Auswirkung zu haben, aber IntelliJ IDEA teilt Ihnen mit, wenn Ihre Schnittstelle die für funktionale Schnittstellen verwendeten Ausnahmen nicht erfüllen kann. Wenn Sie keine Methode zum Überschreiben angeben, wird Folgendes angezeigt:

Top-Tipps für die Java 8-Entwicklung

Wenn Sie zu viele Methoden angeben, wird Folgendes angezeigt:

Top-Tipps für die Java 8-Entwicklung

Und wenn Sie es auf eine Klasse statt auf eine Schnittstelle anwenden, werden Sie gewarnt:

Top-Tipps für die Java 8-Entwicklung

Lambda-Ausdrücke können verwendet werden Jede Schnittstelle mit einer einzelnen abstrakten Methode, sie kann jedoch nicht mit abstrakten Klassen verwendet werden, die dieselben Kriterien erfüllen. Scheint unlogisch, aber so ist es.

4. Stream

Die Stream-API ist ein weiteres großes Feature von Java 8, und ich denke, wir wissen wirklich nicht, wie stark sich dadurch die Art und Weise ändern wird, wie wir programmieren. Hier sind einige Dinge, die ich hilfreich fand.

Punktoperatoren in die Warteschlange stellen

Ich persönlich bevorzuge es, meine Stream-Vorgänge in die Warteschlange zu stellen. Natürlich müssen Sie dies nicht tun, da ich es hilfreich fand, Folgendes zu tun:

  • Sehen Sie auf einen Blick, welche Operationen ich habe

  • Einfacheres Debuggen (obwohl IntelliJ IDEA die Möglichkeit bietet, Haltepunkte für eine beliebige Anzahl von Lambda-Ausdrücken in einer Zeile festzulegen, wäre die Aufteilung auf verschiedene Zeilen einfacher)

  • Kommentieren Sie Aktionen, wenn ich Ich teste Dinge

  • Einfach einfügen peek() zum Debuggen oder Testen

Top-Tipps für die Java 8-Entwicklung

Außerdem ist es meiner Meinung nach ordentlicher. Wenn wir diesem Muster folgen, gewinnen wir hinsichtlich der Reduzierung der Codezeilen nicht viel.

Möglicherweise müssen Sie Ihre Formatierungseinstellungen anpassen, um die Punktoperatoren auszurichten.

Top-Tipps für die Java 8-Entwicklung

Methodenreferenzen verwenden

Ja, es dauert eine Weile, bis man sich an diese seltsame Syntax gewöhnt. Bei richtiger Anwendung erhöht es jedoch die Lesbarkeit. Siehe:

Top-Tipps für die Java 8-Entwicklung

im Vergleich zu den Hilfsmethoden der (relativ) neuen Objects-Klasse:

Top-Tipps für die Java 8-Entwicklung

Letzteres Der Code gibt expliziter an, welche Werte gespeichert werden sollen. IntelliJ IDEA teilt Ihnen normalerweise mit, wann ein Lambda in eine Methodenreferenz reduziert werden kann.

Top-Tipps für die Java 8-Entwicklung

Wenn Sie eine Sammlung durchlaufen, verwenden Sie die Streams-API

… oder neue Sammlungsmethoden wie forEach, sofern möglich. Der Rat von IntelliJ IDEA an Sie lautet:

Top-Tipps für die Java 8-Entwicklung

Im Allgemeinen ist die Verwendung der Streams-API klarer als die Kombination von Schleifen und if-Anweisungen. Zum Beispiel:

Top-Tipps für die Java 8-Entwicklung

IntelliJ IDEA schlägt vor, dass dies wie folgt umgestaltet werden kann:

Top-Tipps für die Java 8-Entwicklung

Leistungstests, die ich durchgeführt habe, zeigen dieses Refactoring ist überraschend – es ist nicht immer vorhersehbar, ob die Leistung gleich bleibt, sich verbessert oder schlechter wird. Wie immer gilt: Wenn die Leistung einer Anwendung entscheidend ist, messen Sie sie, bevor Sie einen Stil auf einen anderen übertragen.

Verwenden Sie Schleifen, wenn Sie über Arrays iterieren

Die Verwendung von Java 8 bedeutet jedoch nicht zwangsläufig, dass Sie überall Streams und neue Erfassungsmethoden verwenden müssen. IntelliJ IDEA schlägt die Konvertierung in einen Stream vor. Dies bedeutet jedoch nicht, dass Sie mit „Ja“ antworten müssen (denken Sie daran, dass die Prüfung unterdrückt oder deaktiviert werden kann).

Insbesondere das Durchlaufen kleiner Arrays primitiver Typen wird mit ziemlicher Sicherheit für eine bessere Leistung und wahrscheinlich (zumindest für Java-Entwickler, die mit Streams noch nicht vertraut sind) besser lesbar sein.

Top-Tipps für die Java 8-Entwicklung

Wie bei jeder Technik sind die Regeln nicht in Stein gemeißelt, aber Sie sollten entscheiden, ob Sie die Streams-API so oft wie möglich verwenden oder dennoch Schleifen für einige Vorgänge verwenden . Kurz gesagt: Seien Sie konsequent.

Endlich

Das Obige ist der Inhalt der besten Java 8-Entwicklungsfähigkeiten. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Wie berechnet man das Datum vor einem Jahr oder einem Jahr später in Java 8? Apr 26, 2023 am 09:22 AM

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

Wie berechnet man das Datum eine Woche später mit Java 8? Wie berechnet man das Datum eine Woche später mit Java 8? Apr 21, 2023 pm 11:01 PM

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[

So erhalten Sie den aktuellen Zeitstempel in Java8 So erhalten Sie den aktuellen Zeitstempel in Java8 May 01, 2023 am 11:46 AM

Rufen Sie den aktuellen Zeitstempel in Java8 ab. Die Instant-Klasse verfügt über eine statische Factory-Methode now(), die den aktuellen Zeitstempel zurückgibt, wie unten gezeigt: packagecom.shxt.demo02;importjava.time.Instant;publicclassDemo16{publicstaticvoidmain(String[]args) {Instanttimestamp=Instant.now();System.out.println("Whatisvalueofthisinstant"+timestamp.t

So verwenden Sie vordefinierte Formatierungstools zum Analysieren oder Formatieren von Datumsangaben in Java8 So verwenden Sie vordefinierte Formatierungstools zum Analysieren oder Formatieren von Datumsangaben in Java8 Apr 28, 2023 pm 07:40 PM

So verwenden Sie vordefinierte Formatierungstools in Java8, um Datumsangaben zu analysieren oder zu formatieren packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassDemo17{publicstaticvoidmain(String[]args){StringdayAfterTommorrow="20180205 ";LocalDateformatted =LocalDate.parse

So verwenden Sie die Clock-Klasse in Java8 So verwenden Sie die Clock-Klasse in Java8 Apr 25, 2023 pm 03:37 PM

Die Clock-Klasse von Java8 Java8 fügt eine Clock-Klasse zum Abrufen des aktuellen Zeitstempels oder von Datums- und Uhrzeitinformationen in der aktuellen Zeitzone hinzu. Wo zuvor System.currentTimeInMillis() und TimeZone.getDefault() verwendet wurden, können sie durch Clock ersetzt werden. packagecom.shxt.demo02;importjava.time.Clock;publicclassDemo10{publicstaticvoidmain(String[]args){//Gibt die aktuelle Zeitbasis zurück

So ermitteln Sie, ob zwei Datumsangaben in Java8 gleich sind So ermitteln Sie, ob zwei Datumsangaben in Java8 gleich sind May 02, 2023 am 08:46 AM

Bestimmen Sie, ob zwei Datumsangaben in Java8 gleich sind packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo04{publicstaticvoidmain(String[]args){LocalDatedate1=LocalDate.now();LocalDatedate2=LocalDate.of(2018,2,5) ;if(date1.equals(date2)){System.out.println("Times are equal");}e

So erhalten Sie Jahres-, Monats- und Tagesinformationen in Java8 So erhalten Sie Jahres-, Monats- und Tagesinformationen in Java8 Apr 19, 2023 am 09:49 AM

Die Java8-Version enthält folgende Pakete: packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo02{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();intyear=today.getYear();intmonth=today .getMonthValue();intday=today.getDayOfMonth();System.out.println

Wie überprüfe ich das Schaltjahr in Java 8? Wie überprüfe ich das Schaltjahr in Java 8? May 08, 2023 pm 11:16 PM

在Java8中检查闰年packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo14{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();if(today.isLeapYear()){System.out.println( "ThisyearisLeapyear");}else{System.out.println("2

See all articles