2009-05-05 16 views

risposta

42

Non vorrei dichiarare un'eccezione non controllata nella firma, poiché è fuorviante per l'utente di tale API. Non è più ovvio se l'eccezione debba essere gestita in modo esplicito.

Dichiararlo in javadoc è un approccio migliore poiché consente a qualcuno di gestirlo se lo ritengono necessario, ma sapendo che possono ignorarlo se lo desiderano. Ciò rende chiara la separazione tra selezionata e deselezionata.

+1

Il compilatore java non ti obbliga, per gestire le RuntimeException dichiarate. Quindi puoi dichiararli, allo scopo di "suggerimento" per gli sviluppatori. È discutibile, se JavaDoc è un posto migliore per questo. Il punto relativo alle eccezioni controllate e deselezionate è importante. Selezionate e deselezionate Le eccezioni sono ciò che Java intende realmente con (Compiletime-) Eccezioni (controllato) e RuntimeExceptions (deselezionato). – Guardian667

+2

In primavera la dichiarazione di eccezioni non controllate nella firma del metodo ha iniziato a essere una pratica comune. – danidacar

4

Dal mio punto di vista è meglio dichiarare le eccezioni di runtime almeno nel javadoc per il metodo. Dichiararlo nella firma rende ancora più ovvio ciò che può accadere quando qualcosa va storto. Questa è la ragione principale per cui suggerisco di fornire queste informazioni.

FYI: con il passare del tempo (ora nel 2017) mi sto appoggiando ora molto più a documentarli solo in javadoc ed evitando il più possibile le eccezioni controllate.

1

Questo ha a che fare con la discussione riguardante checked exceptions. La maggior parte concorda sul fatto che le eccezioni non dovrebbero essere dichiarate nelle firme dei metodi.

È inoltre disponibile un discussion relativo alle modalità di utilizzo delle eccezioni di runtime. Concordo con un manifesto che le eccezioni del runtime dovrebbero indicare un errore di programmazione o una condizione fatale. Quindi non c'è molto merito che li dichiari nella firma. Ogni metodo potrebbe potenzialmente attraverso uno.

+0

Dove si inserisce un'eccezione di analisi o qualche altra eccezione di tipo di convalida dei dati. Si sta insinuando che non si dovrebbero usare le eccezioni controllate, ma limitare le eccezioni non controllate che si intendono utilizzare. – Robin

+1

Quello che sto dicendo è che lo sviluppatore non dovrebbe essere costretto a rilevare le eccezioni controllate. Quindi non c'è bisogno di dichiararli nella firma del metodo. In Java, puoi trasformarli in eccezioni di runtime, come sta facendo Spring. Sto anche dicendo che le eccezioni di runtime dovrebbero essere lanciate solo su situazioni non recuperabili. – kgiannakakis

3

A mio avviso, le eccezioni non controllate non devono mai essere dichiarate nella firma del metodo in quanto contrarie alla loro natura.

Se, tuttavia, è probabile che un metodo generi alcune eccezioni non controllate, le circostanze probabili in @throws in Javadoc possono essere utili per gli altri che invocano il metodo per capire cosa può andare storto. Questo è utile solo se per le eccezioni che i chiamanti è probabile che sia in grado di gestire (come ad esempio un NPE a causa di cattivo di ingresso, ecc)

15

Date un'occhiata al javadoc per la raccolta # aggiungono

C'è un intero sfilza di eccezioni unchecked menzionato:

Throws: 
UnsupportedOperationException - add is not supported by this collection. 
ClassCastException - class of the specified element prevents it from being added to this collection. 
NullPointerException - if the specified element is null and this collection does not support null elements. 
IllegalArgumentException - some aspect of this element prevents it from being added to this collection. 

Se avete la pazienza, io consiglierei di fondo che documentano le possibili eccezioni generate dai vostri metodi in questo modo. In un certo senso, è ancora più importante farlo per le eccezioni non controllate, poiché le eccezioni controllate sono in qualche modo autodocumentanti (il compilatore forza il codice chiamante a riconoscerle).

+1

Questa risposta è sbagliata. Stai parlando di affermazioni Javadoc mentre la domanda su 'getta' nella firma del metodo. Queste non sono la stessa cosa Sì, assolutamente * dovresti * documentare tutte le eccezioni generate dalla tua API, ma la domanda non riguarda questo. – Gili

3

Se si sta scrivendo un'API per l'utilizzo da parte di altri, vi è un ampio motivo per la documentazione esplicita dell'intenzione nell'API e non vi sono aspetti negativi nella dichiarazione di RuntimeExceptions nella firma del metodo.

21

Da the Oracle Java tutorial:

"Se è così buono per documentare API di un metodo, comprese le eccezioni può buttare, perché non specificare le eccezioni di runtime anche tu?" Le eccezioni Runtime rappresentano problemi che sono il risultato di un problema di programmazione e, come tale, il codice del client API non può ragionevolmente essere previsto per il ripristino da essi o per gestirli in alcun modo. Tali problemi di includono eccezioni aritmetiche, come la divisione per zero; eccezioni del puntatore, ad esempio il tentativo di accedere a un oggetto tramite un riferimento zero ; e indicizzazione delle eccezioni, come il tentativo di accedere a un elemento di matrice attraverso un indice troppo grande o troppo piccolo.

Le eccezioni di runtime possono verificarsi ovunque in un programma e in un tipico possono essere molto numerose. Dovendo aggiungere eccezioni di runtime a ogni dichiarazione di metodo ridurrebbe la chiarezza di un programma.

+0

Pertanto, il compilatore non richiede di rilevare o specificare eccezioni di runtime (sebbene sia possibile). – danidacar

Problemi correlati