Java-logo

Upgraden van Java 11 naar Java 17: dit is er nieuw

04 Jul 2022, 19:00

In september 2021 is Java 17 uitgekomen. Nu, een jaar later, wordt het wel eens tijd om te upgraden. Ook Java 17 is namelijk een lts-versie van Java met ondersteuning tot september 2023 en verlengde ondersteuning tot september 2026, waardoor deze versie geschikt is voor productie. We zetten de belangrijkste vernieuwingen voor je op een rij als je upgradet van Java 11 naar Java 17.

Voordat we beginnen eerst iets over de JDK. Een belangrijke wijziging in Java 17 is namelijk dat je de Oracle JDK nu wel mag gebruiken in productie, voor zowel commerciële als persoonlijke doeleinden. Ondersteuning voor deze JDK eindigt wel één jaar nadat de volgende Java-LTS-versie is uitgebracht, dus dat is wel iets om rekening mee te houden.

Multi-line strings

De eerste, nieuwe functie die het vermelden waard is, zijn multi-line strings, oftewel tekstblokken. Je kunt nu met drie quotes een multi-line string maken. Het resultaat is natuurlijk gewoon een string. Binnen een multi-line string kun je gewoon newlines en quotes gebruiken zonder dat je ze hoeft te escapen. Op deze manier kun je dus eenvoudig wat HTML, JSON of SQL in je code plaatsen. Multi-line strings zijn er sinds Java 15.

Records

Lombok is een erg populaire library in de Java-wereld. Logisch natuurlijk, want de hele tijd getters, setters en constructors genereren en om de haverklap refactoren, daar word je al snel gek van. Laat staan de toString, hashCode en equals methodes. Een alternatief op Lombok is om Kotlin te gebruiken in combinatie met data classes.

Sinds Java 14 is dat in veel gevallen niet meer nodig, dankzij de introductie van Records. Records zijn immutable data classes waarbij je alleen de naam van de class mee hoeft te geven, en de types en namen van de velden. De Java-compiler maakt dan automatisch equals, hashCode en toString methodes voor je, evenals private final velden, een public constructor en getters voor de velden.

Switch-expressies

Switch-expressies zijn vernieuwd in Java 14 en zijn nu korter. Je kunt nu de arrow-syntax gebruiken om direct een waarde terug te geven, geen break meer nodig. Ook kun je direct switch-expressie toewijzen aan een variabele, wat ‘m mooi kort maakt.

Als je liever de oude syntax graag gebruikt, kun je nu ook met yield direct een waarde opleveren. Je kunt dan break weglaten, om fallthrough te voorkomen.

Z Garbage collector is nu stable

In Java 11 was die al beschikbaar, de Z Garbage collector, maar sinds Java 15 heeft die het label ‘klaar voor productie’ gekregen. Deze low-latency garbage collector is beschikbaar voor Linux, macOS en Windows en voert al zijn werk in parallel uit. Ook onderbreekt deze garbage collector niet langer dan 10ms de executie van een thread. Dat maakt ‘m een stuk geschikter voor low-latency applicaties dan de standaard garbage collector.

Met de Z Garbage Collector is het belangrijk om de heap size goed af te stellen. Het is nodig dat je genoeg heapruimte overlaat zodat je levende variabelen plek hebben én nog nieuwe variabelen gealloceerd kunnen worden. Om de Z Garbage Collector in je applicatie te gebruiken, gebruik je het volgende commando bij het uitvoeren van je applicatie: java -XX:+UserZGC JeApplication.java.

Kleinere nieuwigheden

Andere nieuwe functies in de afgelopen zes Java-releases vinden we in dat je instanceof nu pattern matching ondersteunt. Dat betekent dat je in een if-statement zowel kunt checken of een object een instantie is van een class en direct kunt assignen aan een variabele. Dat ziet er zo uit:

if (o instanceof Car car) {
   System.out.println("Car: " + car.toString());
}

Ook verbetert Java 14 de leesbaarheid van nullpointer-execepties als je meerdere methodes achter elkaar gebruikt. Java print nu welke methode null terug heeft gegeven.

Als je een Stream wilt omzetten naar een List, gebruik je altijd de methode .collect(Collectors.toList()). Sinds Java 16 kun je nu direct op een stream het simpelere .toList() gebruiken. Dat maakt alles net wat korter.

Nieuwe functies in Java 17

De functies die we tot nu toe hebben besproken, zijn bijna allemaal geïntroduceerd in eerdere Java-versies. Het zijn de belangrijkste vernieuwingen die je gaat merken als je van Java 11 upgradet naar versie 17. Toch brengt Java 17 zelf ook wat nieuwigheden met zich mee. Zo verbetert Java 17 de pseudo-random number generator met een nieuwe interface die makkelijker in gebruik is, namelijk de RandomGeneratorFactory. Verder ondersteunt Java 17 nu ook de Apple Silicon-architectuur op macOS en ondersteunt het sealed classes, vooral handig voor library’s. Met een sealed class heb je controle over wie de class mag extenden.

Conclusie

Dat was het: als je upgradet van Java 11 naar Java 17 kun je een hoop nieuwe features van Java gebruiken die de afgelopen vier jaar zijn geïntroduceerd. Wij hebben de belangrijkste voor je op een rij gezet. Deze nieuwe functies maken Java een stuk moderner en minder verbose.

Gerelateerde inhoud

AWS CDK-logo
Aan de slag met AWS CDK v2
Overzicht van JDK’s