Als Eonics consultant werk je samen met collega’s aan het bijhouden van je kennis. Zo leidt collega Michel ten Voorde momenteel een groepje dat werkt aan de nieuwe OCP certificering. Daarnaast verdiepte hij zich ook in de aankomende Java features en deelt deze graag met collega’s en de Inbox-lezer.
1. Compact number formatting
Met compact number formatting wordt het voortaan mogelijk om automatisch nummers te converteren naar een tekst die voor een bepaald land en taal van toepassing is. Zie het onderstaande voorbeeld:
NumberFormat compactFormatter = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.LONG);
String result = compactFormatter.format(9000);
System.out.println("It's over " + result + "!!!");
// OUTPUT: “It’s over nine thousand”
Zoals je ziet in het bovenstaande voorbeeld wordt het getal 9000 op deze manier automatisch omgezet in de tekst: “nine thousand”, handig!
2. Behulpzame NullPointerExceptions
Je kent het wel. Je zit vlak voor een deadline de laatste stukken code te debuggen en krijgt de beruchte melding:
Exception in thread "main" java.lang.NullPointerException
Vervolgens is het zoeken geblazen naar welke variabele nou precies de exception heeft veroorzaakt, heel irritant.
Om dit probleem te verhelpen kan Java nu aangeven waar de exceptie precies door komt. Neem bijvoorbeeld deze code:
// c == null
System.out.println(a.b.c.d);
Java zal voortaan duidelijker aangeven wat het probleem is, in dit geval:
Exception in thread "main" java.lang.NullPointerException:
Cannot read field "d" because "a.b.c" is null
3. Records
Records zijn niet muteerbare data classes die je eenvoudig kunt definiëren door het simpelweg opgeven van naam en type. Neem bijvoorbeeld:
record Point(int x, int y) {}
Alle andere relevante zaken die je nodig hebt worden vervolgens automatisch gegenereerd door de compiler:
- corresponderende private final velden
- de getters (zonder de get-prefix)
- een zogenaamde canonical constructor voor alle velden
- equals, hashCode en toString
Een mooie en handige toevoeging al met al.
4. Pattern matching voor instanceof
Een andere subtiele maar welkome verandering is de verbeterde en verkorte syntax bij het gebruik van instanceof.
In de oude situatie zou je bijvoorbeeld schrijven:
if (obj instanceof Point) {
Point p = (Point) obj;
return x == p.x && y == p.y;
} else {
return false;
}
Met deze nieuwe feature kan dat korter en leesbaarder:
if (obj instanceof Point p) {
return x == p.x && y == p.y;
} else {
return false;
}
Klein maar fijn!
5. Sealed classes
De nieuwe zogenaamde sealed classes en interfaces limiteren welke andere classes of interfaces hen mogen implementeren.
Dit maakt het mogelijk voor een superklasse om wel toegankelijk te blijven, zonder de mogelijkheid te bieden om deze ook te extenden.
Bijvoorbeeld:
public abstract sealed class Shape
permits Triangle, Square, Circle {...}
Gepermiteerde subclasses zijn op de volgende wijze gelimiteerd:
- ze moeten direct de sealed class extenden;
- ze moeten in dezelfde module of package zitten;
- ze moeten expliciet aangeven hoe ze de overerfde sealing van hun superklasse doorgeven
Dit klinkt vrij abstract maar met de onderstaande voorbeelden zie je hopelijk beter de achterliggende logica:
public final class Triangle extends Shape {...}
public sealed class Square extends Shape permits Rectangle {...}
public non-sealed class Circle extends Shape {...}
Meer weten en zelf aan de slag?
Bekijk deze presentatie om alle voorbeelden te zien. Aan het einde van de presentatie is ook een link te vinden naar een git repo met oefeningen waarmee je zelf aan de slag kunt.
Op zoek naar nieuwe collega’s om je kennis mee te delen?
Bij Eonics vinden we kennisdeling erg belangrijk. We bieden dan ook volop mogelijkheden om daarmee bezig te zijn. Ook benieuwd of Eonics bij jou past? Laat je gegevens achter in het onderstaande formulier, dan nemen we zo snel mogelijk contact met je op.