Java 14: die NullPointerException lernt sprechen!

Wer kennt sie nicht, die NullPointerException? Manche nennen sie auch den „Billion Dollar Mistake“, weil sie häufig auftritt und ihre Bugfixes im Lauf der Jahrzehnte zusammengerechnet Millarden von Dollar gekostet haben müssen.

Modernere Sprachen wie etwa Kotlin treten diesem Umstand gegenüber, indem sie es standardmäßig gar nicht erst erlauben, dass eine Variable den Wert null annimmt.

Sehr „geschwätzig“ ist die NullPointerException nicht. Wenn sie auftritt, sieht die Fehlerausgabe üblicherweise so aus:

Gut, nun weiß man dass die NPE in Zeile 10 von MyClass.java aufgetreten ist. Was aber, wenn dort so etwas steht:

Das Beispiel ist ein Extremfall, der in dieser Form (hoffentlich) nicht oft vorkommt. Aber die Frage, welche der Referenzen in der betroffenen Zeile null ist, stellt sich öfter, und ist nicht leicht zu beantworten.

Doch das soll sich bald ändern. Denn es gibt ein Java Enhancement Proposal namens „JEP-358: Helpful NullPointerExceptions“ 1, das Abhilfe schaffen soll. Das JEP soll nach aktuellem Stand in Java 14 enthalten sein, das im März 2020 erscheint2.

Ich habe den Early Access Build von Java 14 heruntergeladen3 und das neue Feature schon einmal ausprobiert. Dafür habe ich die folgende Testklasse geschrieben:

Diese habe ich mit Java 14 (EA) kompiliert…

…und ausgeführt:

Die Ausgabe war:

Hm, gegenüber früherer Versionen ist keine Änderung festzustellen. Ein Blick in den JEP-358 bringt Licht ins Dunkel. Die Funktionalität muss mit einem Kommandozeilenparameter aktiviert werden (in späteren Java-Versionen soll sie dann standardmäßig aktiv sein):

Jetzt sieht die Ausgabe so aus:

Schon besser, oder?

Allerdings immer noch ein bisschen unschön, weil statt der Namen unserer Referenzen im Code <local0> angezeigt wird. Dem schaffen wir Abhilfe, indem wir beim Kompilieren Debug-Informationen hinzufügen lassen (Kommandozeilenparameter -g):

Nun haben wir schöne sprechende Fehlermeldungen:

Quellen:

1 https://openjdk.java.net/jeps/358 ^

2 https://openjdk.java.net/projects/jdk/14/ ^

3 https://jdk.java.net/14/ ^

 

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*Pflichtfelder

*