Prosty sposób na uniknięcie NullPointerException

Chyba jednym z bardziej frustrujących błędów jakie zostają nam rzucone jest NullPointerException. Za każdym razem gdy NPE się pojawia, zastanawiam się jakim cudem dany obiekt mógł być nullem. Zwłaszcza, gdy coś jest tak oczywista jak String name w klasie Person. Niestety często chcąc dokonać szybkich zmian odpuszczamy przeanalizowanie wszystkich możliwych przypadków i potem otrzymujemy niemiłą niespodziankę. Pokażę wam jeden prosty sposób jak unikać NPE, który wydaje się oczywisty, ale jednak czasem zdarza się – celowo lub nie – zapomnieć o tym rozwiązaniu.

Wywołanie metody na Stringu, który jest nullem

Pewnie wiele razy zdarzyło wam się wywołać metodę equals(). Tak samo jak wiele razy mieliście coś porównać w takiej sytuacji, w której nie miała znaczenia kolejność obiektów. Bo przecież equals() powinno zwrócić taki sam wynik, jeżeli porównujemy obiekt a do b, jak i b do a. Tylko czy na pewno nie ma to znaczenia? Pewnie już wiecie o co chodzi.

String a = "";
String b = null;
System.out.println(a.equals(b));
System.out.println(b.equals(a));

Czy tzw. pusty string jest tym samym co null. Oczywiście nie, ale tylko pierwsze wywołanie metody equals() pozwoli się o tym przekonać. Za drugim zostanie wyrzucony NullPointerException. To, na którym obiekcie wywołamy metodę, a który umieścimy jako argument metody ma czasem kolosalne znaczenie. I tak spójrzcie jeszcze na ten przykład, może trochę karkołomny, lecz pytanie brzmi które wywołanie metody compareTo() na pewno uchroni nas przed NPE?

Person personA = getPersonFromPesel(81010128282L);
Person personB = new Person(82310123232L);

int isAOlder = personA.compareTo(personB);
int isBOlder = personB.compareTo(personA);

W tym przypadku mamy pewność, że personB nie jest nullem, gdyż jest tworzony nowy obiekt. Można więc bezpiecznie wywołać metodę compareTo(). Natomiast nie jesteśmy pewni co zwróci metoda getPersonFromPesel() i czy nie będzie to null. Chcąc więc uzyskać porównanie metodą compareTo() lepiej wykorzystać ten drugi wariant i w miarę potrzeb odwrócić wynik.

To taki mały tip, który mam nadzieję, że czasem się przyda w codziennym juniorskim programowaniu.

Prosty sposób na uniknięcie NullPointerException

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przewiń do góry