Як суб'єктивне питання це слід закрити, але оскільки воно все ще відкрите:
Це частина внутрішньої політики, яка застосовувалася в моєму попередньому місці роботи, і вона спрацювала дуже добре. Це все з пам'яті, тому я не можу згадати точне формулювання. Варто зазначити, що вони не використовували перевірені винятки, але це виходить за межі питання. Неперевірені винятки, які вони використовували, потрапили до 3 основних категорій.
NullPointerException: Не кидайте навмисно. NPE повинні бути викинуті тільки VM, коли винесе нульове посилання. Необхідно докласти всіх можливих зусиль для того, щоб вони ніколи не кидались. @Nullable і @NotNull слід використовувати разом з інструментами аналізу коду, щоб знайти ці помилки.
IllegalArgumentException: кидається, коли аргумент функції не відповідає публічній документації, щоб помилку можна було ідентифікувати та описати з точки зору переданих аргументів. Ситуація ОП потрапляла б у цю категорію.
IllegalStateException: кидається, коли функція викликається і її аргументи є або несподіваними в момент їх передачі, або несумісні зі станом об'єкта, членом якого є метод.
Наприклад, існували дві внутрішні версії IndexOutOfBoundsException, використовувані в речах, що мають довжину. Один підклас IllegalStateException, який використовується, якщо індекс був більшим за довжину. Інший підклас IllegalArgumentException, який використовується, якщо індекс був від'ємним. Це було тому, що ви можете додати більше об'єктів до об'єкта, і аргумент буде дійсним, тоді як від'ємне число ніколи не є дійсним.
Як я вже говорив, ця система працює дуже добре, і потрібно було комусь пояснити, чому це відмінність: "Залежно від типу помилки, вам зрозуміло, що робити. Навіть якщо ви насправді не можете зрозуміти, ви зрозумієте, що робити. щоб зрозуміти, що пішло не так, ви можете зрозуміти, де виправити цю помилку та створити додаткову інформацію про налагодження. "
NullPointerException: Обробіть справу Null або поставте твердження, щоб NPE не кидався. Якщо ви ставите твердження, це лише один з двох інших типів. По можливості продовжуйте налагодження, як ніби твердження там було в першу чергу.
IllegalArgumentException: у вас на сайті виклику щось не так. Якщо передані значення є з іншої функції, з’ясуйте, чому ви отримуєте неправильне значення. Якщо ви передаєте в одному з своїх аргументів розповсюдження, помилка перевіряє стек виклику, поки ви не знайдете функцію, яка не повертає очікуване.
IllegalStateException: Ви не викликали свої функції у правильному порядку. Якщо ви використовуєте один із своїх аргументів, перевірте їх і киньте IllegalArgumentException, що описує проблему. Потім ви можете розповсюджувати щоки проти стека, поки не знайдете проблему.
У будь-якому разі, його суть полягала в тому, що ви можете копіювати лише незаконні аргументиAssertions в стек. Ви не можете розповсюдити IllegalStateExceptions або NullPointerExceptions в стек, оскільки вони мали щось спільне з вашою функцією.