Back to Blogs
Blog Img

De beste features van Java 17 voor developers

In september 2021 lanceerde Oracle versie 17 van Java. Voor wie meetelt: dat zijn 6 nieuwe versies in minder dan 3 jaar. Je gaat je bijna afvragen of er met zoveel releases achter elkaar nog wel nieuws is. Wij kunnen daar kort over zijn: Java Development Kit17heeft leuke nieuwe opties. En je kunt ook nog in de toekomst kijken. Benieuwd wat je met JDK 17 kan doen? Wij laten het zien.

Snellere ontwikkeling van Java Development Kits

De keuze om 6 versies terug te kijken komt niet uit de lucht vallen. De bèta van JDK werd in 1995 gelanceerd en iedere paar jaar geüpdatet. Om die ontwikkeling te versnellenbrengt Oracle sinds 2018 iedere 6 maanden een nieuwe versie uit. Plan is om steeds na twee jaar een LTS (Long Term Support) release uit te brengen. Dat loopt nog niet helemaal op schema. De vorige LTS was Java 11 in 2018 (vandaar dat wij 6 versies teruggaan). Die daarvoor was versie 8 (2014). Java 17 zal volgens plan als LTS versiein 2023 opgevolgd worden door Java 21.

Nieuwe features vs. preview features

Tot zover versioning. Wat verandert er voor developers? Behoorlijk wat. Met het snellere releaseschema heeft Oracle de vrijheid om nieuwe features te testen én ontwikkelaars ermee te laten werken voor ze formeel in de versie opgenomen worden. Eén of twee releases lang kun je zo al met previews van deze features werken. JEP 359 Records was bijvoorbeeld een preview in JDK 14 en 15, voordat het standaard aan stond in JDK 16. Je kunt preview featuresactiveren door -enable-preview als argument toe te voegen aan de compiler. 

De drie beste features van JDK 17

Omdat Java 17 een LTS release is, is het waarschijnlijk dat het gros van de bedrijven hiernaar gaat upgraden. Dat maakt een LTS interessanter dan de tussentijdse updates. Drie features in deze versie verdienen extra jouw aandacht. Dat zijn:

  1. Local variable type inference;

  2. Verbeterdeswitch;

  3. Pattern matching met instanceof.

Local variable type inference

Een beetje Javacode ontaardt al snel in een taalbrij. Localvariable type inferencehelpt dat verminderen. In oudere versies van Java moet je het type van een variabele twee keer declareren. Ervan uitgaande dat je <> gebruikt (toegevoegd in versie 7)heb je één set parameters nodig (als ze aan beide zijden van de vergelijking identiek zijn). Daarna moet je dezelfde variabele in de HashMap herhalen. In versie 17 benoem je een keyword tot variabele en laat je de compiler het verder uitzoeken. Dat scheelt weer wat regels code.

Twee belangrijke details bij het declareren van een variabele

Dat klinkt eenvoudig, maar je moet bij het declareren van een variabele met twee dingen rekening houden. Om te beginnen: je kunt het type variabele niet dynamisch aanpassen. Een string blijft een string. Daar kun je niet spontaan een int of een float van maken. Ten tweede: zodra je de variabele aanroept, moet je er een type aan geven. De compiler loopt niet door jouw code heen om uit te zoeken wat de variabele uiteindelijk gaat doen. 

Verbeterde switch 

We zijn in vorige versies van JDK allemaal wel eens op zoek geweest naar die ene vermiste break binnen een switch-statement. Zelfs een eenvoudige switch levert behoorlijk wat regels code open ieder statement moet ook nog eens met een break worden afgesloten. Vergeet je de break, dan voert de compiler de code op de volgende regel uit alsof die bij de vorige hoort (en ben jij een avondje aan het debuggen).JDK 17 rekent met dit probleemaf door ons arsenaal uit te breiden met switch expressions. 

Switch expression

In een switch expression is break niet nodig om aan te geven dat de uit te voeren regel eindigt. In plaats daarvan gebruik je -> om regels te maken. Links van de pijl definieer je de case, rechts de uit te voeren actie. Dat scheelt behoorlijk wat regels code én voorkomt dat je (bij het vergeten van een break) onverwachte resultaten krijgt. Daar komt bij dat je binnen de switch expressionkeuze hebt uit return of yield als operator. Return geeft de waarde terug die bij de variabele hoort. Met yield kun je eerst nog een bewerking op die waarde uitvoeren.

Pattern matching met instanceof

Pattern matching was eenpreview feature in Java 14 en Java 15. In Java 16 is het officieel toegevoegd. Omdat Java 17 de LTS versie is, krijgen meer ontwikkelaars nu toegang tot deze vernieuwing. Instanceof gebruiken we al langer om te controleren of een variabele van een bepaald type is. In vorige versies kon je vervolgens op basis van true of false andere acties definiëren. Pattern matching maakt het mogelijk om direct op de bevinding van de instanceof operator actie te ondernemen. Dat scheelt in de hoeveelheid benodigde regels code. 

In één regel type bepalen én actie uitvoeren

In de oude toepassing van instanceof declareer je eerst dat je het type van een bepaalde variabele gaat bepalen. Daarna kun je op basis van de uitkomst de inhoud van die variabele ophalen en daar iets mee doen. In de nieuwe versie van instanceof kun in één regel stellen dat je het type wilt bepalen en – binnen diezelfde regel – gelijk aangeven wat je bij een specifieke uitkomst met die inhoud wilt doen. Als de variabele van het type string is, en als inhoud ‘hond’ heeft, kun je direct de opdracht geven ‘woef’ op het scherm te tonen. In oudere versies vereist dit verschillende regels code. 

Pattern matching voor switch

Een preview feature in Java 17 is pattern matching voor de switch operator. Daarmee kun je binnen een switch-instructie met instanceof zoeken naar een bepaald type variabele en op basis daarvan actie nemen. Je kan bijvoorbeeld door een binaire boom zoeken met switch en de inhoud van een specifieke node terugkoppelen met de return operator. Met deze feature kun je in Java 17 al experimenteren door -enable-preview in de compiler als argument toe te voegen. 

Aan de slag als Java Developer?

Java 17 bevat allerlei vernieuwingen. Dit zijn slechts een paar voorbeelden. Ben jij Java developer en wil je met de laatste én beste versie van JDK aan de slag? Wij zijn op zoek naar professionals die het meeste uit deze software kunnen halen.

Lees meer over Java Development