Hoe is het nu met… Java

2020-09-24

Nieuwe features sinds Java 13 (met opinie)

Er zijn 3 absolute zekerheden in het leven: je betaalt belasting, het leven houdt een keer op, en Oracle doet tweemaal per jaar een Java release. Waar een redelijk aantal teams nog op Java 8 zit (dat is zó 2014) en de Java 11 vacatures je om de oren vliegen op LinkedIn, beschikken we per september 2020 alweer over Java 15. Java is een echte puber nu. En daar horen grote veranderingen bij.

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!


Bekijk alle posts van Ramon