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.