JavaRush /Java-Blog /Random-DE /10 Java 8-Funktionen, von denen Sie noch nie gehört haben...

10 Java 8-Funktionen, von denen Sie noch nie gehört haben.

Veröffentlicht in der Gruppe Random-DE
Lambdas, Lambdas, Lambdas. Das ist alles, was man hört, wenn über Java 8 gesprochen wird. Aber das ist nur ein Teil. Java 8 hat viele neue Funktionen – einige leistungsstarke neue Klassen und Redewendungen und andere einfach Dinge, die von Anfang an vorhanden sein sollten. Ich wollte zu zehn neuen Funktionen übergehen, die meiner Meinung nach kleine Juwelen sind, die es auf jeden Fall wert sind, kennengelernt zu werden. Es gibt bestimmt mindestens ein oder zwei davon, die Sie ausprobieren möchten, also fangen wir an! 1) Standardmethoden. Neu in der Java-Sprache: Sie können jetzt Methodenkörper zu Schnittstellen hinzufügen ( Standardmethoden ). Diese Methoden werden bedingungslos allen Klassen hinzugefügt, die diese Schnittstellen implementieren. Dies gibt Ihnen die Möglichkeit, neue Funktionen zu vorhandenen Bibliotheken hinzuzufügen, ohne den alten Code zu zerstören. Das ist definitiv ein Plus. Andererseits verwischt es ernsthaft die Grenze zwischen der Schnittstelle, die als Konvention die Einhaltung bestimmter Bedingungen vorschreibt, und der Klasse, die ihnen als private Implementierung folgt. In den (richtigen) richtigen Händen kann dies eine elegante Möglichkeit sein, Schnittstellen intelligenter zu gestalten, Wiederholungen zu vermeiden und Bibliotheken zu erweitern. In schlechten Händen; Wir werden bald Methoden in Schnittstellen sehen, die dies aufrufen und in einen konkreten Typ umwandeln. Brrr.... 2) Prozesse stoppen. Das Starten eines zusätzlichen Prozesses gehört zu den Dingen, die Sie tun, obwohl Sie halb wissen, dass Sie zurückkommen (debuggen), um ihn zu debuggen, wenn der Prozess (abstürzt), abbricht, (hängt) hängt oder 100 % der CPU beansprucht. Die Process-Klasse wurde jetzt mit zwei neuen Methoden ausgestattet, die Ihnen bei der Kontrolle widerspenstiger Prozesse helfen. Mit isAlive () können Sie ganz einfach überprüfen, ob ein Prozess ausgeführt wird, ohne darauf warten zu müssen. Die zweite und mächtigere (Warnung!) ist destroyForcably() , mit der Sie einen Prozess (schamlos) gewaltsam stoppen (killen) können, der seine Zeit überschritten hat (Warten oder aus anderen Gründen) oder nicht mehr benötigt wird. 3) StampedLock. Nun zu etwas wirklich Aufregendem. Niemand synchronisiert gerne Code. Dies ist ein todsicherer Weg, die Leistung Ihrer Anwendung zu verlangsamen (insbesondere im großen Maßstab) oder, schlimmer noch, sie zum Einfrieren zu bringen. Und doch hat man manchmal einfach keine Wahl. Es gibt viele Redewendungen zum Synchronisieren des Multithread-Zugriffs auf eine Ressource. Eine der am meisten bevorzugten ist ReadWriteLock und verwandte Implementierungen. Diese Redewendung reduziert Konflikte, indem sie mehreren Threads die Nutzung einer Ressource ermöglicht und nur die Threads blockiert, die sie bearbeiten. Es klingt großartig, aber in der Praxis ist diese Sperre sehr langsam , insbesondere bei einer großen Anzahl von Schreibthreads. Dies erwies sich als so schlimm, dass Java 8 einen neuen RWLock namens StampedLock einführt . Diese Sperre ist nicht nur schneller, sondern bietet auch eine leistungsstarke API für optimistisches Sperren, mit der Sie zu geringen Kosten eine Lesesperre erhalten können, in der Hoffnung, dass in kritischen Abschnitten des Codes keine Schreiboperation erfolgt. Am Ende des Abschnitts fragen Sie die Sperre, ob in dieser Zeit eine Aufzeichnung stattgefunden hat. In diesem Fall können Sie entscheiden, ob Sie es erneut versuchen, die Sperre eskalieren oder aufgeben möchten. Dieses Schloss ist ein leistungsstarkes Werkzeug und verdient einen Beitrag über sich selbst. Ich bin riesengroß gespannt auf dieses neue Spielzeug. Großartig! Zusätzlich können Sie lesen Hier . 4) Konkurrierende Rekorder. Dies ist ein weiteres kleines Juwel für alle, die Multithread-Anwendungen ausführen. Eine einfache und effiziente neue API zum Lesen und Schreiben von Zählern aus mehreren Threads. Manchmal ist es sogar schneller als die Verwendung von AtomicIntegers. Ziemlich cool! 5) Optionale (oder optionale) Werte. Oh, Nullzeiger, ein Kopfzerbrechen für alle Java-Entwickler. Die vielleicht beliebteste aller Ausnahmen gibt es schon seit sehr frühen Zeiten. Zumindest seit 1965 . In Anlehnung an Scala und Haskell verfügt Java 8 über ein neues Muster namens „Optional“ zum Umschließen von Referenzen, die null sein können. Dabei handelt es sich keineswegs um ein Allheilmittel zur Abschaffung von Null, sondern vielmehr um eine Möglichkeit für API-Designer, auf Codeebene (anstelle der Dokumentation) anzugeben, dass ein Nullwert zurückgegeben oder an die Methode übergeben werden kann, und der Aufrufer muss dies tun Bereite dich darauf vor. Dies funktioniert also nur für neue APIs, sofern Aufrufer nicht zulassen, dass die Referenz aus dem Wrapper entweicht, wo sie auf unsichere Weise dereferenziert werden könnte. Ich muss sagen, dass ich dieser Funktion ziemlich ambivalent gegenüberstehe. Einerseits bleiben Nullen ein großes Problem, daher schätze ich alles, was getan wurde, um es zu lösen. Andererseits bin ich recht skeptisch, ob das gelingt. Dies liegt daran, dass der Einsatz von Optional einen nachhaltigen Einsatz des gesamten Unternehmens erfordert und nur geringe unmittelbare Auswirkungen hat. Ohne strenge Durchsetzungsmaßnahmen wird es wahrscheinlich auf der linken Straßenseite bleiben. Lesen Sie mehr über Optional . 6) Kommentieren Sie alles. Eine weitere kleine Weiterentwicklung in der Java-Sprache: Anmerkungen können zu fast allem in Ihrem Code hinzugefügt werden. Bisher konnten Anmerkungen nur zu Dingen wie Klassen oder Methodendeklarationen hinzugefügt werden. Seit Java 8 können Anmerkungen zu Variablen- und Parameterdeklarationen hinzugefügt werden, wenn ein Wert in einen bestimmten Typ umgewandelt oder sogar ein neues Objekt zugewiesen wird. Dies ist Teil einer konzentrierten Anstrengung (zusammen mit Verbesserungen an JavaDoc-Tools und APIs), um die Sprache für statische Analyse- und Messtools (wie FindBugs) benutzerfreundlicher zu machen. Dies ist eine nette Funktion, aber genau wie invokeDynamic, die in Java 7 eingeführt wurde, hängt ihr tatsächlicher Wert davon ab, was die Gesellschaft damit macht. 7) Überlaufoperationen. Hier ist eine Reihe von Methoden, das vom ersten Tag an Teil der Kernbibliothek sein sollte. Mein Lieblingshobby ist das Debuggen numerischer Überläufe, wenn Ints 2^32 überschreiten, und das Erstellen der schlimmsten und unerwartetsten Fehler (z. B. „Wie um alles in der Welt bekomme ich diesen seltsamen Wert?“). Auch hier gibt es keine Allheilmittel, aber es gibt zahlreiche Funktionen zur Manipulation von Zahlen, die bei einem Überlauf auf eine weniger nachsichtige Art und Weise ausgeworfen werden als Ihr Standardoperator +/*, der bedingungslos überläuft. 8) Gehen Sie den Katalog durch. Das Durchsuchen des Inhalts eines Verzeichnisbaums gehört seit langem zu den Dingen, nach denen Menschen bei Google suchen (in diesem Fall wird Ihnen wahrscheinlich die Verwendung von Apache.FileUtils empfohlen). Java 8 verleiht der Files -Klasse ein Facelift mit zehn neuen Methoden. Mein Favorit ist walk() , das einen Lazy Thread erstellt (wichtig für große Dateisysteme), um den Inhalt einer Verzeichnisstruktur zu durchlaufen. 9) Starke Zufallsgenerierung. Über die Verwundbarkeit von Passwörtern und Schlüsseln mangelt es heutzutage nicht an Gesprächen. Softwaresicherheit ist ein komplexes und fehleranfälliges Geschäft. Deshalb gefällt mir die neue SecureRandom-Methode. getinstanceStrong() , das automatisch den stärksten Zufallsgenerator auswählt, der für die Java Virtual Machine verfügbar ist. Dies verringert die Wahrscheinlichkeit, dass Sie ausfallen oder einen schwachen Generator haben, wodurch die Schlüssel und verschlüsselten Werte anfälliger für Hackerangriffe werden. 10. Date.toInstant(). Java 8 führt eine völlig neue API für Datums- und Uhrzeitangaben ein . Das ist ziemlich verständlich, da das bestehende nicht sehr gut ist. Joda strebt im Wesentlichen seit mehreren Jahren eine Java-API für Datums- und Uhrzeitangaben an. Doch auch mit der neuen API bleibt ein großes Problem bestehen: Es gibt eine Menge Code und Bibliotheken, die die alte API verwenden. Und wir alle wissen, dass sie hier bleiben werden. Also, was wirst du tun? Um dies zu erreichen, hat Java 8 etwas ziemlich Elegantes getan, indem es der Date-Klasse eine neue Methode namens toInstant() hinzugefügt hat , die sie in eine neue API konvertiert. Dadurch können Sie schnell auf die neue API umsteigen, selbst wenn Sie mit Code arbeiten, der die alte Datums-API verwendet (und dies auch in absehbarer Zukunft tun wird).
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION