En tant que question subjective, cela devrait être fermé, mais comme il est toujours ouvert:
Cela fait partie de la politique interne utilisée à mon ancien lieu de travail et cela a très bien fonctionné. Tout cela est de mémoire, donc je ne me souviens pas de la formulation exacte. Il convient de noter qu'ils n'ont pas utilisé d'exceptions vérifiées, mais cela dépasse le cadre de la question. Les exceptions non vérifiées qu'ils ont utilisées se répartissaient en 3 catégories principales.
NullPointerException: ne lancez pas intentionnellement. Les NPE doivent être lancés uniquement par la machine virtuelle lors du déréférencement d'une référence nulle. Tous les efforts possibles doivent être faits pour s'assurer que ceux-ci ne sont jamais jetés. @Nullable et @NotNull doivent être utilisés conjointement avec les outils d'analyse de code pour trouver ces erreurs.
IllegalArgumentException: levée lorsqu'un argument d'une fonction n'est pas conforme à la documentation publique, de sorte que l'erreur peut être identifiée et décrite en termes d'arguments transmis. La situation du PO tomberait dans cette catégorie.
IllegalStateException: levée lorsqu'une fonction est appelée et que ses arguments sont soit inattendus au moment où ils sont passés, soit incompatibles avec l'état de l'objet dont la méthode est membre.
Par exemple, il y avait deux versions internes de l'IndexOutOfBoundsException utilisées dans les choses qui avaient une longueur. Une sous-classe de IllegalStateException, utilisée si l'index était supérieur à la longueur. L'autre une sous-classe de IllegalArgumentException, utilisé si l'index était négatif. En effet, vous pouvez ajouter plus d'éléments à l'objet et l'argument serait valide, alors qu'un nombre négatif n'est jamais valide.
Comme je l'ai dit, ce système fonctionne très bien, et il a fallu quelqu'un pour expliquer pourquoi la distinction est là: "Selon le type d'erreur, il est assez simple pour vous de savoir quoi faire. Même si vous ne pouvez pas réellement comprendre ce qui n'a pas fonctionné, vous pouvez trouver où intercepter cette erreur et créer des informations de débogage supplémentaires. "
NullPointerException: gérez le cas Null ou insérez une assertion afin que le NPE ne soit pas levé. Si vous mettez une assertion, ce n'est qu'un des deux autres types. Si possible, continuez le débogage comme si l'assertion était là en premier lieu.
IllegalArgumentException: vous avez un problème sur votre site d'appel. Si les valeurs transmises proviennent d'une autre fonction, découvrez pourquoi vous recevez une valeur incorrecte. Si vous transmettez l'un de vos arguments, propagez l'erreur vérifie la pile d'appels jusqu'à ce que vous trouviez la fonction qui ne renvoie pas ce que vous attendez.
IllegalStateException: vous n'avez pas appelé vos fonctions dans le bon ordre. Si vous utilisez l'un de vos arguments, vérifiez-les et lancez une exception IllegalArgumentException décrivant le problème. Vous pouvez ensuite propager les joues contre la pile jusqu'à ce que vous trouviez le problème.
Quoi qu'il en soit, son point était que vous ne pouvez copier les IllegalArgumentAssertions que dans la pile. Il n'y a aucun moyen pour vous de propager les exceptions IllegalStateExceptions ou NullPointerExceptions dans la pile, car elles ont quelque chose à voir avec votre fonction.