STRZEC SIĘ!
Asercje są usuwane w czasie wykonywania, chyba że jawnie określisz opcję „włącz asercje” podczas kompilowania kodu. Asercji Java nie należy używać w kodzie produkcyjnym i należy ją ograniczyć do metod prywatnych (patrz Wyjątek vs. asercja ), ponieważ oczekuje się, że metody prywatne będą znane i używane tylko przez programistów. Również assert
rzuci AssertionError która rozciąga się Error
nie Exception
, a które zazwyczaj oznacza, że masz bardzo nienormalne błąd (jak „OutOfMemoryError”, które jest trudne do odzyskania od, prawda?), Nie oczekuje się, aby móc leczyć.
Usuń flagę „włącz asercje” i sprawdź za pomocą debugera, a zobaczysz, że nie nadepniesz na wywołanie wyrzucenia IllegalArgumentException ... ponieważ ten kod nie został skompilowany (ponownie po usunięciu „ea”)
Lepiej jest użyć drugiej konstrukcji do metod publicznych / chronionych, a jeśli chcesz czegoś, co jest zrobione w jednym wierszu kodu, jest co najmniej jeden sposób, który znam. Ja osobiście korzystam z klasy Spring Framework , Assert
która ma kilka metod sprawdzania argumentów i która generuje błąd „IllegalArgumentException” w przypadku niepowodzenia. Zasadniczo to, co robisz, to:
Assert.notNull(obj, "object was null");
... Który faktycznie wykona dokładnie ten sam kod, który napisałeś w drugim przykładzie. Istnieje kilka innych przydatnych metod, takich jak hasText
, hasLength
tam.
Nie lubię pisać więcej kodu niż to konieczne, więc cieszę się, gdy zmniejszam liczbę zapisanych linii o 2 (2 linie> 1 linia) :-)
obj.hashCode()
;-)