Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Modernes Java
Manchmal ist es schwer zu glauben, dass sich eine Sprache, die buchstäblich 20 Jahre lang abwärtskompatibel war, so drastisch verändern konnte. Vor der Veröffentlichung von Java SE 8 im März 2014,1 hatte Java trotz seines Erfolgs als maßgebliche serverseitige Programmiersprache den Ruf, "das COBOL des 21. Jahrhunderts" zu sein. Jahrhunderts" zu sein. Sie war stabil, allgegenwärtig und stark auf Leistung ausgerichtet. Änderungen kamen, wenn überhaupt, nur langsam, und die Unternehmen sahen sich kaum veranlasst, aufzurüsten, wenn neue Versionen verfügbar waren.
Das änderte sich, als Java SE 8 veröffentlicht wurde. Java SE 8 enthielt "Project Lambda", die wichtigste Neuerung, die funktionale Programmierkonzepte in die wohl weltweit führende objektorientierte Sprache einführte. Lambda-Ausdrücke, Methodenreferenzen und Streams veränderten die Sprache grundlegend, und seither versuchen die Entwickler, diesen Rückstand aufzuholen.
In diesem Buch geht es nicht darum, zu beurteilen, ob die Änderungen gut oder schlecht sind oder ob sie anders hätten gemacht werden können. Das Ziel ist es, zu sagen: "Das haben wir, und so kannst du es nutzen, um deine Arbeit zu erledigen." Deshalb ist dieses Buch wie ein Rezeptbuch aufgebaut. Es geht darum, was du tun musst und wie die neuen Funktionen von Java dir dabei helfen.
Dennoch hat das neue Programmiermodell eine Menge Vorteile, wenn man sich erst einmal daran gewöhnt hat. Funktionaler Code ist in der Regel einfacher und leichter zu schreiben und zu verstehen. Der funktionale Ansatz begünstigt die Unveränderlichkeit, was das Schreiben von nebenläufigem Code sauberer und erfolgreicher macht. Als Java entwickelt wurde, konnte man sich noch auf das Mooresche Gesetz verlassen, das die Prozessorgeschwindigkeit etwa alle 18 Monate verdoppelt. Heutzutage wird die Leistung dadurch verbessert, dass sogar die meisten Handys mehrere Prozessoren haben.
Da Java schon immer auf Abwärtskompatibilität bedacht war, sind viele Unternehmen und Entwickler auf Java SE 8 umgestiegen, ohne die neuen Idiome zu übernehmen. Die Plattform ist trotzdem leistungsfähiger und es lohnt sich, sie zu nutzen, ganz abgesehen davon, dass Oracle im April 2015 offiziell das Ende von Java 7 verkündet hat.
Es hat ein paar Jahre gedauert, aber die meisten Java-Entwickler/innen arbeiten jetzt mit dem Java 8 JDK, und es ist an der Zeit zu verstehen, was das bedeutet und welche Konsequenzen es für deine zukünftige Entwicklung hat. Dieses Buch soll dir diesen Prozess erleichtern.
Wer sollte dieses Buch lesen?
Bei den Rezepten in diesem Buch wird davon ausgegangen, dass der typische Leser bereits mit Java-Versionen vor Java SE 8 vertraut ist. Du musst kein Experte sein, und einige ältere Konzepte werden wiederholt, aber das Buch ist nicht als Leitfaden für Anfänger in Java oder objektorientierter Programmierung gedacht. Wenn du schon einmal Java in einem Projekt verwendet hast und mit der Standardbibliothek vertraut bist, wirst du gut zurechtkommen.
Dieses Buch deckt fast die gesamte Java SE 8 ab und enthält ein Kapitel, das sich mit den neuen Änderungen in Java 9 befasst. Wenn du verstehen willst, wie die neuen funktionalen Idiome der Sprache die Art und Weise, wie du Code schreibst, verändern werden, ist dieses Buch ein anwendungsorientierter Weg, dieses Ziel zu erreichen.
Java ist auf der Serverseite allgegenwärtig und wird von einer Vielzahl von Open-Source-Bibliotheken und -Tools unterstützt. Das Spring Framework und Hibernate sind zwei der beliebtesten Open-Source-Frameworks, die beide mindestens Java 8 benötigen oder bald benötigen werden. Wenn du vorhast, in diesem Ökosystem zu arbeiten, ist dieses Buch genau das Richtige für dich.
Wie dieses Buch organisiert ist
Dieses Buch ist in Rezepte gegliedert, aber es ist schwierig, Rezepte mit Lambda-Ausdrücken, Methodenreferenzen und Streams einzeln zu besprechen, ohne auf die anderen zu verweisen. In den ersten sechs Kapiteln werden verwandte Konzepte behandelt, du musst sie aber nicht in einer bestimmten Reihenfolge lesen.
Die Kapitel sind wie folgt gegliedert:
-
Kapitel 1, Die Grundlagen, behandelt die Grundlagen von Lambda-Ausdrücken und Methodenreferenzen und stellt anschließend die neuen Funktionen von Schnittstellen vor: Standardmethoden und statische Methoden. Außerdem wird der Begriff "funktionale Schnittstelle" definiert und erklärt, wie wichtig er für das Verständnis von Lambda-Ausdrücken ist.
-
In Kapitel 2, Das java.util.function-Paket, wird das neue
java.util.function
-Paket vorgestellt, das in Java 8 der Sprache hinzugefügt wurde. Die Schnittstellen in diesem Paket lassen sich in vier spezielle Kategorien einteilen (Konsumenten, Lieferanten, Prädikate und Funktionen), die auch in der restlichen Standardbibliothek verwendet werden. -
In Kapitel 3, Streams, wird das Konzept der Streams erläutert und wie sie eine Abstraktion darstellen, mit der du Daten transformieren und filtern kannst, anstatt sie iterativ zu verarbeiten. Die Konzepte "Map", "Filter" und "Reduce" beziehen sich auf Streams, wie in den Rezepten in diesem Kapitel gezeigt wird. Sie führen letztendlich zu den Ideen von Parallelität und Gleichzeitigkeit, die in Kapitel 9 behandelt werden.
-
In Kapitel 4, Komparatoren und Collectors, geht es um die Sortierung von Streaming-Daten und deren Rückumwandlung in Collections. Auch das Partitionieren und Gruppieren ist Teil dieses Kapitels, das die normalerweise als Datenbankoperationen geltenden Vorgänge in einfache Bibliotheksaufrufe verwandelt.
-
Kapitel 5, Probleme mit Streams, Lambdas und Methodenreferenzen, ist ein vielseitiges Kapitel. Die Idee dahinter ist, dass du jetzt, wo du weißt, wie man Lambdas, Methodenreferenzen und Streams benutzt, untersuchen kannst, wie sie kombiniert werden können, um interessante Probleme zu lösen. Die Konzepte der Faulheit, der verzögerten Ausführung und der Closure-Komposition werden ebenso behandelt wie das leidige Thema der Ausnahmebehandlung.
-
Kapitel 6, Der optionale Typ, befasst sich mit einer der umstrittensten Neuerungen in der Sprache, dem Typ
Optional
. In den Rezepten in diesem Kapitel wird beschrieben, wie der neue Typ verwendet werden soll und wie du Instanzen erstellen und Werte aus ihnen extrahieren kannst. In diesem Kapitel wird auch die funktionale Idee der Map- und Flat-Map-Operationen aufOptional
wieder aufgegriffen und erklärt, wie sie sich von den gleichen Operationen auf Streams unterscheiden. -
Kapitel 7, Dateieingabe und -ausgabe, befasst sich mit dem praktischen Thema der Ein- und Ausgabeströme (im Gegensatz zu funktionalen Strömen) und den Ergänzungen, die in der Standardbibliothek vorgenommen wurden, um die neuen funktionalen Konzepte beim Umgang mit Dateien und Verzeichnissen zu berücksichtigen.
-
Kapitel 8, Das java.time Paket, zeigt die Grundlagen der neuen Date-Time API und wie sie (endlich) die alten Klassen
Date
undCalendar
ersetzen. Die neue API basiert auf der Joda-Time Bibliothek, hinter der viele Entwicklerjahre an Erfahrung und Nutzung stehen und die zumjava.time
Paket umgeschrieben wurde. Ehrlich gesagt, wenn dies die einzige Neuerung in Java 8 gewesen wäre, hätte sich das Upgrade schon gelohnt. -
Kapitel 9, Parallelität und Gleichzeitigkeit, befasst sich mit einem der impliziten Versprechen des Stream-Modells: dass du einen sequenziellen Stream mit einem einzigen Methodenaufruf in einen parallelen umwandeln und so alle auf deinem Rechner verfügbaren Prozessoren nutzen kannst. Gleichzeitigkeit ist ein großes Thema, aber dieses Kapitel stellt die Erweiterungen der Java-Bibliothek vor, die es dir leicht machen, damit zu experimentieren und zu beurteilen, ob sich die Kosten und Vorteile lohnen.
-
Kapitel 10, Java 9 Additions, behandelt viele der Änderungen in Java 9, dessen Veröffentlichung für den 21. September 2017 geplant ist. Die Details von Jigsaw können ein ganzes Buch füllen, aber die Grundlagen sind klar und werden in diesem Kapitel beschrieben. Andere Rezepte behandeln private Methoden in Interfaces, die neuen Methoden für Streams, Collectors und
Optional
und wie man einen Stream von Daten erstellt.2 -
In Anhang A, Generics und Java 8, geht es um die generischen Fähigkeiten in Java. Obwohl die Generics als Technologie bereits in Version 1.5 eingeführt wurden, lernten die meisten Entwickler/innen nur das Nötigste, um sie zu nutzen. Ein Blick in die Javadocs von Java 8 und 9 zeigt, dass diese Zeiten vorbei sind. Das Ziel dieses Anhangs ist es, dir zu zeigen, wie du die API lesen und interpretieren kannst, damit du die viel komplexeren Methodensignaturen verstehst.
Die Kapitel und auch die Rezepte selbst müssen nicht in einer bestimmten Reihenfolge gelesen werden. Sie ergänzen sich zwar gegenseitig und jedes Rezept endet mit Verweisen auf andere, aber du kannst überall mit dem Lesen beginnen. Die Gruppierung der Kapitel dient dazu, ähnliche Rezepte zusammenzufassen, aber es wird erwartet, dass du von einem zum anderen springst, um das Problem zu lösen, das du gerade hast.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Tipp
Dieses Element steht für einen Tipp oder eine Anregung.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Der Quellcode für das Buch befindet sich in drei GitHub-Repositories: eines für die Java 8-Rezepte (alles außer Kapitel 10) unter https://github.com/kousen/java_8_recipes, eines für die Java 9-Rezepte unter https://github.com/kousen/java_9_recipes und ein spezielles für das größere CompletableFuture
Beispiel in Rezept 9.7 unter https://github.com/kousen/cfboxscores. Alle sind als Gradle-Projekte mit Tests und einer Build-Datei konfiguriert.
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Wenn du eine CD-ROM mit Beispielen aus den O'Reilly-Büchern verkaufst oder verteilst, ist eine Genehmigung erforderlich. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Erlaubnis erforderlich.
Wir schätzen die Namensnennung, verlangen sie aber nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Modern Java Recipes von Ken Kousen (O'Reilly). Copyright 2017 Ken Kousen, 978-0-491-97317-2."
Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
O'Reilly Safari
Hinweis
Safari (ehemals Safari Books Online) ist eine mitgliedschaftsbasierte Schulungs- und Nachschlageplattform für Unternehmen, Behörden, Lehrkräfte und Einzelpersonen.
Mitglieder haben Zugang zu Tausenden von Büchern, Schulungsvideos, Lernpfaden, interaktiven Tutorials und kuratierten Playlists von über 250 Verlagen, darunter O'Reilly Media, Harvard Business Review, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett und Course Technology, um nur einige zu nennen.
Weitere Informationen erhältst du unter http://oreilly.com/safari.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-998-9938 (in den Vereinigten Staaten oder Kanada)
- 707-829-0515 (international oder lokal)
- 707-829-0104 (Fax)
Wenn du Kommentare oder technische Fragen zu diesem Buch stellen möchtest, sende eine E-Mail an bookquestions@oreilly.com.
Weitere Informationen zu unseren Büchern, Kursen, Konferenzen und Neuigkeiten findest du auf unserer Website unter http://www.oreilly.com.
Finde uns auf Facebook: http://facebook.com/oreilly
Folge uns auf Twitter: http://twitter.com/oreillymedia
Schau uns auf YouTube: http://www.youtube.com/oreillymedia
Danksagungen
Dieses Buch ist das unerwartete Ergebnis eines Gesprächs, das ich Ende Juli 2015 mit Jay Zimmerman führte. Ich war (und bin immer noch) Mitglied der No Fluff, Just Stuff Konferenztour, und in diesem Jahr hielt Venkat Subramaniam mehrere Java 8 Vorträge. Jay erzählte mir, dass Venkat beschlossen hatte, seine Aktivitäten im kommenden Jahr einzuschränken, und Jay fragte mich, ob ich bereit wäre, in der neuen Saison ab Anfang 2016 ähnliche Vorträge zu halten. Ich programmiere seit Mitte der 90er Jahre in Java (ich habe mit Java 1.0.6 angefangen) und hatte sowieso vor, die neuen APIs zu lernen, also sagte ich zu.
Ich halte nun schon seit ein paar Jahren Vorträge über die neuen funktionalen Funktionen von Java. Im Herbst 2016 hatte ich mein letztes Buch fertiggestellt,3 und da die Idee war, ein weiteres Rezeptbuch für denselben Verlag zu schreiben, dachte ich dummerweise, dass das Projekt einfach sein würde.
Der bekannte Science-Fiction-Autor Neil Gaiman sagte einmal, dass er nach der Fertigstellung von American Gods dachte, er wisse, wie man einen Roman schreibt. Sein Freund korrigierte ihn und sagte, er wisse jetzt, wie man diesen Roman schreibt. Jetzt verstehe ich, was er meinte. Der ursprüngliche Entwurf für dieses Buch sah etwa 25 bis 30 Rezepte vor, die sich auf etwa 150 Seiten verteilen sollten. Das Endergebnis, das du in der Hand hältst, hat mehr als 70 Rezepte, die fast 300 Seiten füllen, aber der größere Umfang und die mehr Details haben ein viel wertvolleres Buch hervorgebracht, als ich beabsichtigt hatte.
Das liegt natürlich daran, dass ich viel Hilfe hatte. Der bereits erwähnte Venkat Subramaniam war äußerst hilfreich, sowohl durch seine Vorträge, seine anderen Bücher als auch durch private Gespräche. Er war auch so freundlich, dieses Buch zu rezensieren, also sind alle verbleibenden Fehler seine Schuld. (Nein, sie sind von mir, aber sag ihm bitte nicht, dass ich das zugegeben habe.)
Ich bin auch sehr dankbar für die häufige Unterstützung durch Tim Yates, der einer der besten Programmierer ist, die ich je getroffen habe. Ich kannte ihn von seiner Arbeit in der Groovy-Community, aber seine Vielseitigkeit geht weit darüber hinaus, wie seine Stack Overflow-Bewertung zeigt. Rod Hilton, den ich auf der NFJS-Tour bei der Präsentation von Java 8 kennengelernt habe, war ebenfalls so freundlich, eine Bewertung abzugeben. Ihre beiden Empfehlungen waren von unschätzbarem Wert.
Ich hatte das Glück, im Laufe von zwei Büchern, mehr als einem Dutzend Videokursen und vielen Online-Schulungen auf der Safari-Online-Plattform mit den hervorragenden Redakteuren und Mitarbeitern von O'Reilly Media zusammenzuarbeiten. Brian Foster war eine ständige Quelle der Unterstützung, ganz zu schweigen von seiner fast magischen Fähigkeit, die Bürokratie zu durchbrechen. Ich lernte ihn kennen, als ich mein vorheriges Buch schrieb, und obwohl er nicht der Herausgeber dieses Buches war, waren seine Hilfe und Freundschaft während des gesamten Prozesses sehr wertvoll für mich.
Mein Lektor, Jeff Bleiel, war sehr verständnisvoll, als sich die Länge des Buches verdoppelte, und sorgte für die nötige Struktur und Organisation, um weiter voranzukommen. Ich bin sehr froh, dass wir zusammenarbeiten konnten und hoffe, dass wir das auch in Zukunft tun werden.
Ich muss mich bei vielen meiner Kollegen auf der NFJS-Tour bedanken, darunter Nate Schutta, Michael Carducci, Matt Stine, Brian Sletten, Mark Richards, Pratik Patel, Neal Ford, Craig Walls, Raju Gandhi, Kirk Knoernschild, Dan "the Man" Hinojosa und Janelle Klein für ihre ständige Perspektive und Ermutigung. Sowohl das Schreiben von Büchern als auch das Unterrichten von Trainingskursen (mein eigentlicher Tagesjob) sind einsame Beschäftigungen. Es ist toll, eine Gemeinschaft von Freunden und Kollegen zu haben, auf die ich mich verlassen kann, wenn es um Perspektiven, Ratschläge und verschiedene Formen der Unterhaltung geht.
Schließlich muss ich meiner Frau Ginger und meinem Sohn Xander meine ganze Liebe aussprechen. Ohne die Unterstützung und die Freundlichkeit meiner Familie wäre ich nicht der Mensch, der ich heute bin - eine Tatsache, die mir mit jedem Jahr klarer wird. Ich kann gar nicht ausdrücken, was ihr beide mir bedeutet.
1 Ja, es sind tatsächlich schon über drei Jahre seit der ersten Veröffentlichung von Java SE 8 vergangen. Ich kann es auch nicht glauben.
2 Ja, auch ich hätte mir gewünscht, dass das Java 9-Kapitel Kapitel 9 gewesen wäre, aber es erschien mir nicht richtig, die Kapitel nur wegen dieser zufälligen Symmetrie neu anzuordnen. Diese Fußnote muss genügen.
3 Gradle Recipes for Android, ebenfalls von O'Reilly Media, dreht sich alles um das Gradle-Build-Tool, wie es auf Android-Projekte angewendet wird.
Get Moderne Java-Rezepte now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.