Nieuwe features sinds Java 13 (met opinie)
We beginnen dit artikel voorzichtig, met een feature waar geen mens op tegen kan zijn, namelijk…
Tekst Block
Preview | Permanent |
Java 13, 14 | Java 15 |
Tekst Blocks zijn multi-line strings. Eigenlijk niets anders dus dan syntactische suiker om string definities over meerdere regels leesbaarder te maken. Deze feature is met name bedoeld om hardgecodeerde data in de vorm van xml of json handiger te kunnen definiëren.
Voorbeeld
var message = """ Farewell endless concatenations """;
Waar kennen we deze feature toch van? Van andere talen dus. Handig in elk geval!
Switch Expression
Preview | Permanent |
Java 13 | Java 14 |
Vergeet de oude switch-case. Sinds Java 14 maakt de switch expressie officieel onderdeel uit van de taal. Maak vandaag nog indruk op je collega’s door ernaar te refereren als een multiary operator; een operator met meerdere argumenten en een output. Het copy-pasten van het break statement hoeft ook niet meer, mits je de pijltjes notatie gebruikt.
Voorbeeld
int nrOfLegs = switch (animal) { case ANT, MOSQUITO, MANTIS -> 6; case SPIDER, SCORPION -> 8; case CENTIPEDE -> 200; };
Deze simpele feature kan een onleesbare waslijst aan if-then-elses aangevuld met ORs, terugbrengen tot prettig te lezen code. Prettig te lezen code is beter onderhoudbaar en beter voor je humeur. Mooie feature, goed gedaan Oracle!
Nullpointer Exceptions (die ook echt pointen naar de null)
Preview | Permanent |
N.V.T. | Java 14 |
Vanaf Java 14 levert de prehistorische draak die we kennen als de NullPointerException een stukje macht in. Waar voorheen de berichtinhoud van deze error melding slechts hintte op de regel code van de oorzaak van het probleem, is sinds Java 14 expliciet aangegeven welk onderdeel null is.
Voorbeeld
Exception in thread "main" java.lang.NullPointerException: Cannot read field 'dat' because 'dit.deze' is null. at Prog.main(Prog.java:42)
Je vraagt je af wat er voor nodig is geweest om Oracle tot dit geniale inzicht te doen komen, maar beter laat dan nooit hè? Deze verbeterde berichtgeving scheelt weer debugsessies. Minder tijd aan debuggen betekent meer tijd voor features!
Record
Preview | Permanent |
Java 14, 15 | ? |
Records zijn immutable data classes. Het definiëren van een record komt op hetzelfde neer als een final class met final attributen. Daarnaast krijg je er nog een aantal gratis goodies bij, zoals equals(), hashCode() en toString(). Deze feature bevindt zich nog in de preview fase, dus er kunnen nog dingen aan veranderen.
Voorbeeld
record Person(String name, int age) { }
Handige toevoeging, scheelt veel boilerplate code ten opzichte van een reguliere class. Wel jammer dat er geen optie is om ook setters te creëren naar vrije keuze. Dit maakt Records voorlopig nog onbruikbaar voor een aantal toepassingen, marshalling tools leunen bijvoorbeeld vaak op getters en setters. Voorlopig is Lombok dus nog niet outdated.
Sealed classes/interfaces
Preview | Permanent |
Java 15 | ? |
De nieuwe sealed-permits-combinatie is een soort variant op het aloude final keyword. Je kunt hiermee van een class of interface expliciet aangeven welke classes of interfaces mogen overerven. Voor alle andere classes die niet “permitted” zijn, geldt een sealed class dus als final. Je kunt hiermee een hiërarchie met een “gemeenschappelijke voorouder” definiëren, zonder toegang te verlenen voor andere implementaties.
Voorbeeld
sealed interface Element permits Earth, Air, Fire, Water { }
Merkwaardige feature die bij mij een aantal vragen oproept. Het kenbaar maken van implementatie(s) bij een interface schiet toch aan het doel van een interface voorbij, namelijk een contract afspraak? Daarnaast druist het in tegen het Open-Closed-Principe; kan de ontwerper echt 100% zeker zijn dat er nooit een toekomstige casus is, waarin een andere implementatie nuttig is? Verder wel leuk hoor.
Slot
Dit was vanzelfsprekend slechts een greep uit alle veranderingen en verbeteringen. Hopelijk heb ik je nieuwsgierigheid kunnen aanwakkeren en ontdek je zelf nog meer interessants.
We sluiten natuurlijk weer af met: happy coding!