Jako subiektywne pytanie należy to zamknąć, ale ponieważ nadal jest otwarte:
Jest to część polityki wewnętrznej stosowanej w moim poprzednim miejscu zatrudnienia i działała naprawdę dobrze. To wszystko z pamięci, więc nie pamiętam dokładnego sformułowania. Warto zauważyć, że nie korzystali ze sprawdzonych wyjątków, ale to wykracza poza zakres pytania. Niesprawdzone wyjątki, z których korzystali, dzieliły się na 3 główne kategorie.
NullPointerException: Nie rzucaj celowo. NPE mają być wyrzucane tylko przez maszynę wirtualną, gdy odwołuje się odwołanie zerowe. Należy dołożyć wszelkich starań, aby nigdy nie zostały wyrzucone. @Nullable i @NotNull powinny być używane w połączeniu z narzędziami do analizy kodu, aby znaleźć te błędy.
IllegalArgumentException: Zgłaszany, gdy argument funkcji nie jest zgodny z dokumentacją publiczną, dzięki czemu można zidentyfikować błąd i opisać go za pomocą przekazanych argumentów. Sytuacja PO mieści się w tej kategorii.
IllegalStateException: Zgłaszany, gdy funkcja jest wywoływana, a jej argumenty są albo nieoczekiwane w momencie ich przekazania, albo niezgodne ze stanem obiektu, do którego należy metoda.
Na przykład były dwie wewnętrzne wersje IndexOutOfBoundsException używane w rzeczach o długości. Jedna podklasa IllegalStateException, używana, jeśli indeks był większy niż długość. Druga podklasa IllegalArgumentException, używana, jeśli indeks był ujemny. Stało się tak, ponieważ można było dodać więcej elementów do obiektu, a argument byłby prawidłowy, a liczba ujemna nigdy nie jest poprawna.
Jak już powiedziałem, ten system działa naprawdę dobrze i trzeba było wyjaśnić, dlaczego istnieje takie rozróżnienie: „W zależności od rodzaju błędu łatwo jest wymyślić, co należy zrobić. Nawet jeśli tak naprawdę nie możesz dowiedzieć się, co poszło nie tak, możesz dowiedzieć się, gdzie można złapać ten błąd i utworzyć dodatkowe informacje debugowania ”.
NullPointerException: Obsługuj przypadek Null lub wstaw asercję, aby NPE nie został zgłoszony. Jeśli włożysz twierdzenie, to tylko jeden z dwóch pozostałych typów. Jeśli to możliwe, kontynuuj debugowanie tak, jakby to stwierdzenie było w pierwszej kolejności.
IllegalArgumentException: masz coś złego na stronie połączeń. Jeśli przekazywane wartości pochodzą z innej funkcji, dowiedz się, dlaczego otrzymujesz niepoprawną wartość. Jeśli przekazujesz jeden z argumentów propagujących, błąd sprawdza stos wywołań, aż znajdziesz funkcję, która nie zwraca oczekiwanej wartości.
IllegalStateException: Nie wywołałeś swoich funkcji w prawidłowej kolejności. Jeśli używasz jednego z argumentów, sprawdź je i wyślij IllegalArgumentException opisujący problem. Następnie możesz rozłożyć policzki na stosie, aż znajdziesz problem.
W każdym razie jego celem było to, że można kopiować tylko IllegalArgumentAssertions na stos. Nie ma możliwości propagowania wyjątków IllegalStateExceptions lub NullPointerExceptions na stosie, ponieważ miały one coś wspólnego z twoją funkcją.