Heim  >  Artikel  >  Java  >  Fünf Entwicklungstipps für Java 8

Fünf Entwicklungstipps für Java 8

黄舟
黄舟Original
2017-02-20 10:16:401146Durchsuche

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 ernsthaft unterschätzte Funktion und hat das Potenzial, viele NullPointerExceptions zu entfernen, die uns plagen. 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 unüberlegte Anwendung von Optional 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 oder Felder. Glücklicherweise können Sie mit IntelliJ IDEA eine Überprüfung aktivieren, um zu sehen, ob Sie diese Empfehlungen befolgen.

Fünf Entwicklungstipps für Java 8

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.

Fünf Entwicklungstipps für Java 8

Sie sollten nicht einfach get() aufrufen

Die Funktion von Optional besteht darin, auszudrücken, dass der Wert möglicherweise leer ist, und Sie mit dieser Situation umgehen zu lassen. Überprüfen Sie daher unbedingt, ob ein Wert vorhanden ist, bevor Sie etwas damit unternehmen. Der einfache 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.

Fünf Entwicklungstipps für Java 8

Es könnte einen eleganteren Weg geben

Natürlich wäre isPresent() kombiniert mit get() großartig...

Fünf Entwicklungstipps für Java 8

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

Fünf Entwicklungstipps für Java 8

…Oder Sie können orElseGet verwenden, um anzugeben, welche Methode aufgerufen werden soll, wenn der Wert leer 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.

Fünf Entwicklungstipps für Java 8


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.

Halten Sie es kurz

Funktionale Programmierer werden mit längeren Lambda-Ausdrücken zufriedener sein, aber diejenigen, die sich schon seit vielen Jahren mit Java beschäftigen, werden feststellen, dass es einfacher ist, 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.

Fünf Entwicklungstipps für Java 8

  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.

Fünf Entwicklungstipps für Java 8

Explizit

Typinformationen fehlen in Lambda-Ausdrücken, daher kann es sinnvoll sein, Typinformationen für Parameter einzubeziehen.

Fünf Entwicklungstipps für Java 8

Wie Sie sehen, wurde 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.

Fünf Entwicklungstipps für Java 8

Sogar die durch Lambda dargestellte Funktionsschnittstelle:

Fünf Entwicklungstipps für Java 8


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 Listea8093152e673feb7aba1828c43532094 ) , aber vorzugsweise könnten wir eine Methode oder eine Klasse mit einem generischen Typ entwerfen (z. B. Person8742468051c85b06f0a0af9e3e506b5c). Wenn wir beispielsweise die Streams-API verwenden, würden wir einen Lambda-Ausdruck übergeben. Noch besser ist es jedoch, 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

Dadurch 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.

Fünf Entwicklungstipps für Java 8

Dies führt zu...

Verwendung vorhandener Funktionsschnittstellen

Je vertrauter Entwickler mit Java 8-Code werden, desto mehr können wir sehen Was passiert, wenn Schnittstellen wie Lieferant und Verbraucher 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.

[email protected]/*  */

Wenn Sie wirklich Ihre eigene funktionale Schnittstelle erstellen müssen, markieren Sie sie mit dieser Anmerkung wie dieser. 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 markiert:

Fünf Entwicklungstipps für Java 8

Wenn Sie zu viele Methoden angeben, wird Folgendes markiert:

Fünf Entwicklungstipps für Java 8

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

Fünf Entwicklungstipps für Java 8

Lambda-Ausdrücke können mit einer einzelnen abstrakten Methode beliebiger verwendet werden Schnittstelle, sie können jedoch nicht in abstrakten Klassen verwendet werden, die denselben Kriterien entsprechen. 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, wie wir programmieren, ändern wird. 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, dies zu tun:

Sehen Sie auf einen Blick, welche Vorgänge ich hatte

Das Debuggen ist einfacher (obwohl IntelliJ IDEA dies bietet). die Möglichkeit, dies in einer Zeile zu tun. Die Möglichkeit, Haltepunkte für eine beliebige Anzahl von Lambda-Ausdrücken festzulegen, aber die Aufteilung in verschiedene Zeilen macht es einfacher)

Kommentieren Sie die Aktion aus, wenn ich Dinge teste

Einfaches Einfügen von peek( ) zum Debuggen oder Testen

Fünf Entwicklungstipps für Java 8

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

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

Fünf Entwicklungstipps für Java 8

Methodenreferenzen verwenden

Ja, es ist etwas gewöhnungsbedürftig, sich an diese seltsame Syntax zu gewöhnen. Bei richtiger Anwendung erhöht es jedoch die Lesbarkeit. Siehe:

Fünf Entwicklungstipps für Java 8

Vergleichen Sie mit den Hilfsmethoden der (relativ) neuen Objects-Klasse:

Fünf Entwicklungstipps für Java 8

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

Fünf Entwicklungstipps für Java 8

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

…oder neue Sammlungsmethoden wie forEach, wo möglich. Der Vorschlag von IntelliJ IDEA für Sie lautet:

Fünf Entwicklungstipps für Java 8

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

Fünf Entwicklungstipps für Java 8

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

Fünf Entwicklungstipps für Java 8

Von mir durchgeführte Leistungstests 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.

Fünf Entwicklungstipps für Java 8

Wie bei jeder Technik sind die Regeln nicht streng und schnell, 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

Ich entdecke jeden Tag neue Dinge und manchmal ändern sich meine Vorlieben – zum Beispiel Methodenreferenzen, die ich früher gehasst und gemieden habe Ich verwende es in meinem Code. Jetzt würde ich gerne Ihre Tipps hören!

 

Das Obige ist der Inhalt der fünf wichtigsten Entwicklungskompetenzen von Java 8. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
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