Come domanda soggettiva questa dovrebbe essere chiusa, ma poiché è ancora aperta:
Questo fa parte della politica interna utilizzata nella mia precedente sede di servizio e ha funzionato davvero bene. Tutto questo è a memoria, quindi non ricordo l'esatta formulazione. Vale la pena notare che non hanno utilizzato eccezioni verificate, ma questo va oltre lo scopo della domanda. Le eccezioni incontrollate che hanno usato rientravano in 3 categorie principali.
NullPointerException: non lanciare intenzionalmente. Gli NPE devono essere generati solo dalla VM quando si fa riferimento a un riferimento null. Tutti gli sforzi possibili devono essere fatti per garantire che questi non vengano mai lanciati. @Nullable e @NotNull dovrebbero essere usati insieme agli strumenti di analisi del codice per trovare questi errori.
IllegalArgumentException: generato quando un argomento di una funzione non è conforme alla documentazione pubblica, in modo tale che l'errore possa essere identificato e descritto in termini di argomenti passati. La situazione del PO rientrerebbe in questa categoria.
IllegalStateException: generata quando viene chiamata una funzione e i suoi argomenti sono inattesi al momento in cui vengono passati o incompatibili con lo stato dell'oggetto di cui fa parte il metodo.
Ad esempio, c'erano due versioni interne di IndexOutOfBoundsException utilizzate in cose che avevano una lunghezza. Una sottoclasse di IllegalStateException, utilizzata se l'indice era maggiore della lunghezza. L'altra una sottoclasse di IllegalArgumentException, utilizzata se l'indice era negativo. Questo perché potevi aggiungere più oggetti all'oggetto e l'argomento sarebbe valido, mentre un numero negativo non è mai valido.
Come ho già detto, questo sistema funziona davvero bene e ci è voluto qualcuno per spiegare perché c'è la distinzione: "A seconda del tipo di errore, è abbastanza semplice per te capire cosa fare. Anche se non riesci davvero a capire capire cosa è andato storto è possibile capire dove rilevare quell'errore e creare ulteriori informazioni di debug ".
NullPointerException: gestire il caso Null o inserire un'asserzione in modo che l'NPE non venga lanciato. Se metti un'asserzione è solo uno degli altri due tipi. Se possibile, continua il debug come se l'asserzione fosse presente in primo luogo.
IllegalArgumentException: hai qualcosa di sbagliato nel tuo sito di chiamata. Se i valori passati vengono da un'altra funzione, scopri perché stai ricevendo un valore errato. Se si trasmette uno dei tuoi argomenti propagati, l'errore controlla lo stack di chiamate fino a trovare la funzione che non restituisce ciò che ti aspetti.
IllegalStateException: non hai chiamato le tue funzioni nell'ordine corretto. Se stai usando uno dei tuoi argomenti, controllali e lancia un'eccezione IllegalArgumentException che descrive il problema. Puoi quindi propagare le guance contro lo stack fino a quando non trovi il problema.
Ad ogni modo, il suo punto era che puoi solo copiare IllegalArgumentAssertions nello stack. Non è possibile propagare illegalStateExceptions o NullPointerExceptions nello stack perché avevano qualcosa a che fare con la tua funzione.