Domanda

API doc dice mai prendere Throwable sottoclasse Errore che significa un comportamento anomalo. Fa ciò implica che la segregazione tra errore ed eccezione è quella di dire ai programmatori ciò che sottoclasse deve essere catturato e che non dovrebbe? O c'è di più ad esso?

È stato utile?

Soluzione

In generale, Error è qualcosa di gravemente sbagliato (spesso all'interno della piattaforma stessa ), che non si poteva plausibilmente gestire. Le uniche volte che io abbia mai curato circa la cattura Error è per il login it , a seguito della quale ho poi ri-tiro.

Questo è di vitale importanza in quanto è facile lasciare che gli errori (e le eccezioni di runtime) si diffondono lo stack di chiamate in modo tale che essi non sono mai registrati (per esempio usando executorService.submit(Runnable) senza ascoltare il Future restituita)

Errors sono di solito le cose come:

  • la memoria
  • Errore di metodo astratto (ad esempio corsa contro versione diversa di librerie a quelli costruiti contro)
  • Asserzioni (cioè definiti dal programmatore invarianti , o cose che non dovrebbero mai accadere -! lol)

Vorrei quindi dire che RuntimeExceptions sono di solito (ma non sempre) indicativo di di programmazione errori:

  • non controllare per nulla, o passando nullo
  • passando argomenti non validi o che consentono stato non valido
  • la modifica di una collezione, come si sta iterando su di esso

Io di solito raccomando non riuscendo-veloce su questi pure, ma questa è una zona grigia; forse non si controlla l'input dell'utente prima di passarlo al server -hardly pena schiantarsi la vostra applicazione finita!

Exceptions selezionata (vale a dire non-runtime) devono essere utilizzati per le cose che si potrebbe ragionevolmente aspettare che accada e ragionevolmente (o plausibilmente) gestire nel codice. Personalmente mi piace controllato eccezioni ma questi sono resi ingombrante a causa della verbosità / ripetizione coinvolte nella gestione tipi di eccezione distinti nello stesso modo (cioè in più blocchi catch identici). Linguaggi come Scala hanno molto meglio sintassi cattura, ma poi hanno tolto il concetto di controllare eccezioni, come pure!

Altri suggerimenti

Sì, penso che la tua analisi è corretta qui - non sono tenuti a prendere Errors perché rappresentano gli errori di runtime che non possono essere recuperati da, ad esempio OutOfMemoryError.

L'unica ragione per la cattura Throwable è se si esegue codice di terze parti esterno che non è necessario per il corretto funzionamento del programma - se non ti fidi di quel codice, prendere tutto e se si ottiene roba che si didn 't si aspettano (Throwable) quindi disattivare il codice e segnalarlo.

Inoltre potrebbe essere una buona idea quella di distinguere tra Exception e RuntimeException.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top