Un metodo dovrebbe solo throws
un'eccezione se può fornire garanzie ragionevoli sullo stato dell'oggetto, sui parametri passati al metodo e su qualsiasi altro oggetto su cui il metodo agisce. Ad esempio, un metodo che dovrebbe recuperare da una raccolta un elemento che il chiamante si aspetta che sia contenuto al suo interno potrebbe throws
un'eccezione verificata se l'elemento che era previsto esistere nella raccolta, non lo fa. Un chiamante che cattura tale eccezione dovrebbe aspettarsi che la raccolta non contenga l'oggetto in questione.
Si noti che, mentre Java consentirà il controllo delle eccezioni a causa di un metodo che viene dichiarato come eccezioni di lancio dei tipi appropriati, tale utilizzo dovrebbe generalmente essere considerato un anti-pattern. Immaginiamo, ad esempio, che un metodo LookAtSky()
sia dichiarato come chiamante FullMoonException
, e si supponga che lo lanci quando la Luna è piena; Immaginiamo inoltre che LookAtSky()
chiami ExamineJupiter()
, che è anche dichiarato come throws FullMoonException
. Se un è stato lanciato da ExamineJupiter()
, e se LookAtSky()
non lo ha catturato e lo gestisce o lo avvolge in qualche altro tipo di eccezione, il codice che ha chiamato LookAtSky
assumerebbe l'eccezione era il risultato della luna piena della Terra; non avrebbe idea che una delle lune di Giove potrebbe essere il colpevole.
Le eccezioni che un chiamante può prevedere di gestire (incluse essenzialmente tutte le eccezioni controllate) devono essere autorizzate solo a risalire attraverso un metodo se l'eccezione significherà la stessa cosa per il chiamante del metodo in quanto ha significato per il metodo chiamato. Se il codice chiama un metodo che viene dichiarato come l'esecuzione di alcune eccezioni verificate, ma il chiamante non si aspetta che lanci quella eccezione in pratica (ad esempio perché pensa che siano argomenti del metodo pre-validati), l'eccezione verificata dovrebbe essere catturata e spostata in qualche tipo di eccezione non controllata. Se il chiamante non si aspetta che l'eccezione venga lanciata, il chiamante non può aspettarsi che abbia un significato particolare.
Sono sempre stato un fan di "Se ha senso affrontarlo qui ... poi farlo". – CheesePls
Mi piace che tutte le mie eccezioni vengano gestite dove si verificano, quindi non devo occuparmi del resto della strada. –