Suche
Unser Experten-Check zu Java 10 – Teil 1

11 Expertenmeinungen zu Java 10: Lieblings-Features & Besonderheiten des JDK 10

Gabriela Motroc
Jaxenter

Java 10 ist da, und wir haben mit 11 Experten über das aktuelle Release gesprochen. Nicht nur läutet die neue Version den kürzeren Release-Zyklus ein, sie spaltet auch die Gemüter. Ist die neue Sprachversion nicht mehr als ein Wartungsupdate? Oder bringt es vielleicht doch eine größere Veränderung als die Einführung der Lambda-Ausdrücke?

Zum ersten Mal erscheint eine Java-Version nur sechs Monate nach der vorherigen. Aber das ist nicht das Einzige, was sich ändert. Wie weitreichend die Änderungen aber wirklich sind, daran scheiden sich die Geister. Wir haben einige dieser großen Geister gefragt, was sie von dem Thema halten. Die Antworten unserer Experten fallen unterschiedlich aus, helfen aber dabei, die Entwicklung rund um Java einzuordnen. In den nächsten Tagen werden wir hier ihre Antworten auf unsere Fragen präsentieren. Los geht es mit den Besonderheiten der neuen Version und dem Lieblings-Feature der Java-Spezialisten in Java 10.

Java 9 wurde mit Spannung erwartet – nicht wegen seiner Verzögerung, sondern wegen Projekt Jigsaw. Wenn wir weiter zurückgehen, hatte Java 8 beispielsweise Lambda-Ausdrücke und so weiter und so fort. Was ist das Besondere an Java 10?

Die Java-Experten

Donald Smith ist Senior Director des Produktmanagements bei Oracle.

Dr. Wayne Citrin ist CTO und Co-Founder von JNBridge, LLC.

Greg Luck ist CEO und CTO von Hazelcast.

Lukas Eder ist Gründer und Leiter der Forschung und Entwicklung bei der Data Geekery GmbH, dem Unternehmen hinter jOOQ und Java-Champion.

Marcus Biel ist Software-Handwerker, JCP-Mitglied und CleanCode-Prediger.

Markus Eisele ist Leiter der Developer Advocacy bei Lightbend und Java-Champion.

Nicolai Parlog ist Entwickler (vor allem Java), Blogger bei CodeFX, Autor, YouTuber und Trainer.

Richard Gall ist Communications Manager bei Packt.

Simon Ritter ist der Vize-CTO von Azul Systems.

Trisha Gee ist Developer Advocate bei JetBrains, ein Key-Member der Londoner Java Community und Java-Champion.

David Heffelfinger ist Java-Champion und Jakarta EE Consultant und Ausbilder.

Wayne Citrin: Nicht viel. Aus der Sicht der meisten Entwickler ist das größte neue Feature die Typinferenz für lokale Variablen. Nennt mich altmodisch, aber für mich ist Code leichter zu lesen, wenn die Variablendeklarationen den Typ enthalten, und ich habe auch keine Probleme damit, Typen zu liefern, wenn ich Variablen deklariere. Also werde ich diese Funktion wahrscheinlich nicht verwenden. Aber ich denke, dass sehr viele Leute sie benutzen werden, da es auch schon ein sehr beliebtes Feature von C# ist.

Simon Ritter: Java 10 ist das erste Release, das im neuen sechsmonatigen Release-Zyklus erscheint. Das hat zur Folge, dass das JDK 10 nur Features enthält, die in diesem Zeitraum fertig waren. Das Besondere am JDK 10 ist, dass es das schnellste Release von Java in der 23-jährigen Geschichte der Sprache ist.

Richard Gall: Java hat das var-Keyword.

Trisha Gee: Das Besondere an Java 10 ist wahrscheinlich, wie schnell es rausgekommen ist! Nur sechs Monate nach Java 9 erhalten wir ein Update für die Sprache. Dazu auch noch eines, das einige Updates für die Syntax enthält, was die Arbeitsweise von Entwicklern vereinfachen wird (für ein Beispiel sollte man sich die Antwort auf die nächste Frage ansehen).

David Heffelfinger: Das Hauptmerkmal von Java 10 ist die Typinferenz für lokale Variablen. In Java 10 müssen wir den Typ der lokalen Variablen nicht deklarieren, wenn der Compiler es z.B. aus dem Code ableiten kann. Anstatt also eine Liste von ganzen Zahlen so darzustellen: List foo = neue ArrayList(); , werden wir in der Lage sein, unsere Variable wie folgt zu deklarieren: var foo = neue ArrayList();. Das wichtigste „Feature“ von Java 10 ist jedoch keineswegs ein Spachfeature, sondern die Tatsache, dass es das erste Java-Release nach dem neuen sechsmonatigen Release-Zyklus ist.

Lukas Eder: Java 10 ist tatsächlich eher nichts Besonderes. Der neue Release-Zyklus bringt nur wenige Veränderungen mit sich, etwa dass Java 9 und Java 10 keine Long-Term-Releases (LTS) sind und wenige Leute tatsächlich diese Versionen einsetzen werden. Aber es ist gut, dass Oracle nun neue Features schneller veröffentlichen und somit auch schneller Feedback von Nutzern bekommen kann.

Markus Eisele: Zunächst einmal ist dies das erste Release, das dem neuen Release-Zyklus folgt. Wenn diese Veröffentlichung erfolgreich durchgeführt wurde, wird dies allgemein das Vertrauen in reproduzierbare Builds und zukünftige Releases erhöhen. Außerdem bringt Java 10 zusätzliche Unterstützung für Docker, auf die viele bereits seit Längerem warten.

Nicolai Parlog: Java 10 ist in Bezug auf Besonderheiten sehr interessant. Die Lambda-Ausdrücke, die mit Java 8 eingeführt wurden, benötigten eine Menge an Programmieraufwand und hatten großen Einfluss darauf, wie Java-Code nun aussieht. Die Fertigstellung von Java 9 dauerte noch länger, aber der Code selbst sieht durch dieses Update nicht viel anders aus. Java 10 bringt nun die Typinferenz für lokale Variablen, kurz: das Keyword var. Dieses Feature ist, verglichen mit Lambdas oder dem Modulsystem, ziemlich simpel. Auf den Kern reduziert ist es „nur eine kleine Änderung im Compiler“. Wenn sie sich allerdings erstmal verbreitet hat, wird die Typinferenz für lokale Variablen die Art und Weise, wie Java-Code aussieht, tiefgreifender verändern als Lambda-Ausdrücke. Ich bin gespannt, ob dies bald der Fall sein wird.

Marcus Biel: Besonders an Java 10 ist in erste Linie, dass es das erste Release des neuen, halbjährlichen Release-Zyklus‘ ist. Das für sich allein ist ein großer, wichtiger Schritt in die richtige Richtung. Die Typinferenz für lokale Variablen ist das einzige echte Entwickler-Feature. Lokale Variablen kann man dadurch einfach als var definieren, ohne explizit den exakten Typ angeben zu müssen. Für mich als Clean Coder verwässert diese „Compiler-Magie“ ein wenig die Typsicherheit und bringt für mich potentiell eher Schaden als Nutzen. Wie mein Freund Heinz Kabutz sehr schön in seinem Newsletter (Issue 255) aufgezeigt hat, kann es uns in Schwierigkeiten bringen, wenn wir Methoden einer bestimmten Implementierung auf einer Referenzvariable eines abgeleiteten Typs aufrufen.

Donald Smith: Das Besondere an Java 10 ist, dass es das erste Release der neuen sechsmonatigen Frequenz ist, die bereits 2017 angekündigt wurde. Es ist der Beweis, dass zeitbasierte Release-Zyklen für Java SE funktionieren können. Darüber hinaus ist diese Version mehr als ein einfaches Stabilitäts- und Performance-Update für Java 9: Sie führt neue Features wie die Typinferenz für lokale Variablen und parallele Garbage Collection für G1 ein. Die neue Version demonstriert auch die Fähigkeit, experimentelle Funktionen wie einen Java-basierten JIT Compiler und Funktionen, die bisher nur als Closed Source verfügbar waren (etwa Application Class-Data Sharing), einzubinden.

Greg Luck: Es gibt hier keine wirklich großen Features. Es handelt sich um ein reguläres Wartungs-Release. Genauso einfach hätte man es auch Java 9 Update 1 nennen können.

Was ist dein Lieblings-Feature in Java 10?

Wayne Citrin: Ich habe keinen Favoriten. Ich schätze, dass die Typinferenz für lokale Variablen mich am meisten interessiert, aber plane nicht, sie zu nutzen.

Simon Ritter: Das müsste die Typinferenz für lokale Variablen sein. Es ist eine kleine Änderung, die es Entwicklern erlaubt, die Menge an Boilerplate Code, den sie schreiben, zu reduzieren und den Compiler herausfinden zu lassen, welcher Typ eine Variable ist. Es stellt sich heraus, dass es ein paar ungewöhnliche Außenseiterfälle gibt, was bedeutet, dass man Dinge tun kann, die man vorher nicht machen konnte. Das ist cool. Es bedeutet auch, dass du keine Klasse mit dem Namen var mehr definieren kannst (nicht, dass man das jemals tun sollte).

Richard Gall: Die anderen Features sind nicht wirklich wichtig für den normalen Programmierer.

Trisha Gee: Die Typinferenz für lokale Variablen (JEP 286) ist für mich das interessanteste Feature in Java 10. Das ist die Fähigkeit zu sagen:
var myList = neue ArrayList();
statt
Liste myList = neue ArrayList();.
Das sieht nur nach einer Kleinigkeit aus, reduziert aber enorm viel Doppelarbeit (z.B. „List“ auf beiden Seiten des Gleichheitszeichens), entfernt Boilerplate und bringt die Syntax von Java näher an andere JVM-Sprachen heran, die diesen Ansatz bereits übernommen haben. Ich habe mit diesem neuen Feature in Java gespielt (und bin auch mit ähnlicher Syntax in Groovy und Kotlin vertraut), und obwohl es keine neue Art der Programmierung ist, so wie es Lambda-Ausdrücke waren, ist es eine gute Ergänzung der Sprache.

David Heffelfinger: Java 10 ist ein Minor Release und enthält daher keine größeren Features. Das einzige Feature für Nutzer ist die Typinferenz für lokale Variablen, was eine gute Sache ist, wie ich denke.

Lukas Eder: Das einzige, das ich wirklich interessant finde, ist JEP 286, also die Typinferenz für lokale Variablen, von der gerade jOOQ-Nutzer profitieren werden. Sie können nun sämtliche Generics, die jOOQ produziert, inferieren. Darüber habe ich auch einen Blogbeitrag geschrieben.

Markus Eisele: Ich mag die neuen APIs für das Erstellen von nicht-modifizierbaren Collections. Die Methoden List.copyOf, Set.copyOf und Map.copyOf erstellen neue Collection-Instanzen aus bereits bestehenden Instanzen. Und natürlich schlägt mein Herz für die Verbesserungen in Bezug auf Docker. Es ist schwierig, sich aus 109 Neuerungen und Verbesserungen seine Favoriten herauszupicken.

Nicolai Parlog: Ich habe kürzlich mit dem Application Class-Data Sharing (AppCDS) experimentiert, das ich ziemlich interessant finde. Trotzdem muss ich auf diese Frage mit var antworten, einfach weil es so viel Potential (gutes und schlechtes) hat. Über den dafür gedachten Use Case hinaus gibt es einigen Schabernack, den man damit treiben kann. Benji Weber hat einige Beispiele hierfür in seinem Blogpost beschrieben.

Marcus Biel: Keine leichte Frage, jedenfalls keines der zwölf JEPs. JEP 307 (parallele Garbage Collection für G1) ist nett, aber um ehrlich zu sein: Die Garbage Collection zählt nicht gerade zu meinen größten Leidenschaften. Wenn ich mich entscheiden müsste, dann wohl für eine der Erweiterungen der Standard Class Librarys. List, Map und Set bekommen bspw. eine neue statische Methode (copyOf(Collection)), die nicht-modifizierbare Listen, Maps oder Sets wiedergibt, die die Elemente der jeweiligen Collection enthält.

Ich habe die Frage aber mal an meine Follower bei Twitter weitergegeben. Hier die Ergebnisse:

  • 52.7% JEP 286: Local-Variable Type Inference
  • 14.5% JEP 307: Parallel Full GC for G1
  • 7.3% JEP 317: Experimental Java-Based JIT Compiler
  • 5.5% JEP 310: Application Class-Data Sharing
  • 4.8% JEP 312: Thread-Local Handshakes
  • 4.2% JEP 304: Garbage-Collector Interface
  • 3.6% JEP 316: Heap Allocation on Alternative Memory Devices
  • 3% JEP 322: Time-Based Release Versioning
  • 2.4% JEP 319: Root Certificates
  • 1.8% JEP 296: Consolidate the JDK Forest into a Single Repository
  • 0% JEP 313: Remove the Native-Header Generation Tool (javah)
  • 0% JEP 314: Additional Unicode Language-Tag Extensions

Donald Smith: Ich werde meinen inneren Dr. Deprecator kanalisieren und sagen, dass meine Lieblingsfunktionen diejenigen sind, die aus dem JDK entfernt werden. Deshalb gefällt mir JEP 313, also die Entfernung des javah-Tools.

Greg Luck: Typinferenz für lokale Variablen (obwohl es nicht viele Konkurrenten hat): Ein Feature, das alle Scala-Liebhaber sehr schätzen werden, da es erlaubt, die Typdeklaration für lokale Variablen und Schleifen zu überspringen: var map = new HashMap<String, String>();

Im zweiten Teil unserer fünfteiligen Interviewserie haben wir die Experten nach den größten Missverständnissen in Bezug auf Java 10 gefragt. Außerdem verraten sie uns, welche Features sie sich in Java 10 gewünscht hätten, die aber nicht implementiert wurden.

Geschrieben von
Gabriela Motroc
Gabriela Motroc
Gabriela Motroc ist Online-Redakteurin für JAXenter.com. Vor S&S Media studierte Sie International Communication Management an der The Hague University of Applied Sciences.
Kommentare

Hinterlasse einen Kommentar

1 Kommentar auf "11 Expertenmeinungen zu Java 10: Lieblings-Features & Besonderheiten des JDK 10"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Frank Schüler
Gast

Ich kann nicht verstehen wie so viele scheinbar Professionelle Entwickler auf Typinferenz stehen und das in einer stark typisierten Sprache. Ich finde es eines der sinnlosesten Features. Ja, Java ist sehr geschwätzig, aber genau das macht es auch zu einer der besten Sprachen, denn der Code ist auch ohne IDE immer gut zu lesen. Und wenn ich Code schreibe nutzt jeder in der Regel eine IDE, die sowas wie den Variablen Typen automatisch setzt.

Für mich wären Features die eine bessere Arbeit mit Generic zur Laufzeit oder echte Methoden Referencen für „funktionale“ Programmierung viel wichtiger.

Viele Grüße
Frank Schüler