Niestety, nie ma prostego programowego sposobu określania, która zmienna lub wywołanie metody jest źródłem wyjątku. Możesz użyć czegoś takiego, jak Aspect-Oriented Programming (AOP), np. AspectJ, ale nie jest to związane z językiem i zazwyczaj nie jest włączone do programu w celu debugowania.
if (var==null) -> too much work
try { } catch() { }
Debugger
Wiem, że nie chcesz tego słuchać, ale są to po prostu koszt prowadzenia działalności gospodarczej.
if (this.superSL.items.get(name).getSource().compareTo(VIsualShoppingList.Source_EXTRA)==0) {
Nieczęsto spotyka się tak wiele nawiązywanych połączeń metod. Uważam, że najlepiej jest nabrać nawyku łamania tego bardziej - niekoniecznie do 1 połączenia na linię, ale mniej niż to. Czemu?
1) Correctness
- czy jest ważny w projekcie jednego z tych połączeń, aby zwrócić wartość null?Jeśli tak, powinieneś go wyłuskać, przetestować i odpowiednio obsłużyć.
2) Understandability
- byłoby łatwiej dla przyszłych opiekunów (w tym przyszłości ty), aby zrozumieć, jeśli pośrednie, dobrze nazwane zmienne, które pomogą wyjaśnić, co dzieje się na tej linii.
3) Efficiency
- zazwyczaj gdy zagłębimy się w wykres (łącząc serię wywołań metod), najprawdopodobniej trzeba będzie tam wrócić później. Przechwytywanie tej wartości pośredniej w zmiennej pośredniej oznacza unikanie ponownego wykonywania jednego lub więcej wywołań metod.
4) Debugging
- jak wskazano w pytaniu, spltowanie tak złożonej linii upraszcza debugowanie. przez zawężenie możliwego źródła wyjątku.
Hm, byłoby łatwiej znaleźć NullPointerException jeśli to nie był „t one-liner. Naprawdę trudno jest śledzić taki kod. –
Biorąc pod uwagę twoje opcje, chciałbym tylko wskazać, że "zbyt dużo pracy" może w rzeczywistości oznaczać o wiele mniej pracy na dłuższą metę. –
Zmień to w odpowiedni blok. Problem pojawi się w mgnieniu oka. – Geo