Quest'anno ho iniziato a utilizzare diverse librerie di terze parti (tutte open source) e ho notato che alcune eccezioni lanciano in modo corretto (cioè dichiarando esattamente quali eccezioni controllate possono essere lanciate da un metodo nella firma del metodo), mentre altri dichiarano solo throws Exception
, che generalmente rende più difficile catturarli e gestirli correttamente. Penso che esempi per i "buoni" siano le librerie di Apache (almeno quelle che uso come commons-cli
), gli esempi per quelli "cattivi" sono WEKA e il Simple Framework XML. (Tutti i miei esempi sono esempi Java perché uso principalmente Java, ma la mia domanda vale in generale.)
Quindi, un ovvio motivo per il comportamento "cattivo" è che è più facile / veloce da programmare e può sembrare più bello di un throws ThisException, ThatException, AnotherException
. Ma questa è davvero una ragione per cui esiste?
Questo non riguarda Eccezioni selezionate / non selezionate . Riguarda la leggibilità e che devo fare i conti con un'eccezione che ha semplicemente il tipo Exception
di base senza informazioni di chiarimento. Se fosse un'eccezione non controllata, forse sempre la stessa, sarei molto felice finché la documentazione chiarisse perché è successo. Inoltre, ad es. l'API Simple Framework utilizza eccezioni speciali all'interno, ma tutto ciò che viene propagato al livello più alto è "Exception".
Quali sono le ragioni di questo comportamento in generale?