Java w wersji 14 daje możliwość uruchomienia rozszerzonych informacji o znanym i lubianym NullPointerException.
Standardowo, gdy odpalimy taki kawałek kodu:
public static void main(String[] args) { howLong(null); } private static int howLong(String s) { return s.length(); }
Dostaniemy taki oto wyjątek:
Exception in thread "main" java.lang.NullPointerException at NPEEx.howLong(NPEEx.java:12) at NPEEx.main(NPEEx.java:5)
Natomiast, gdy uruchomimy naszą aplikację z dodatkowym argumentem dla Virtual Machine
-XX:+ShowCodeDetailsInExceptionMessages
Dostaniemy już nieco więcej informacji
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "s" is null at NPEEx.howLong(NPEEx.java:8) at NPEEx.main(NPEEx.java:4)
I o ile w powyższym, prymitywnym przykładzie to nie potrzebujemy pomocy to, gdy mamy do czynienia z typowym anty-patternem „train wreck”:
person.getContactInfo().getAddress().getStreet()
To już dobrze wiedzieć co konkretnie się popsuło. Wówczas dostaniemy taką informację:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Address.getStreet()" because the return value of "ContactInfo.getAddress()" is null at NPEEx.main(NPEEx.java:5)
W IntelliJ możemy dodać argument do wirtualnej maszyny w menu Run -> Edit Configurations -> VM Options.
By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.