2013-02-15 16 views
12

Sto progettando una classe di eccezioni personalizzata per la mia applicazione. Ho una domanda molto semplice. Devo estendere da Classe di eccezione o Classe Thunderable? Quali sono i vantaggi ?Classe di eccezione personalizzata: si estende da Eccezione o Thowable?

Intendo buttarlo dagli strati sottostanti e catturarlo nelle classi di livello superiore. Influirà sulla mia decisione di usare Thowable over Exception. È fondamentalmente giusto prendere un Thowable?

Ho avuto altri thread in questo forum. Si parla di avere la traccia dello stack mantenuta quando viene lanciata e non la ha per eccezioni ecc. Capisco che alcuni dicano (here) che Thowable è super-classe di Eccezione e non dovremmo usarlo. Ma altri (here) dicono che l'eccezione è per i casi "Eccezionali".

Questa domanda è piuttosto una discussione su come uno è meglio dell'altro piuttosto che chiedere come.

+2

Alla fine, ciò che si intende catturare al livello più alto è "YourException" - se si tratta di un'eccezione o di un gettale non fa molta differenza. Se altri utenti potrebbero utilizzare la tua API e catturare quell'eccezione, l'estensione dell'eccezione creerebbe probabilmente meno sorprese. – assylias

+0

Grazie per la risposta. Sì, sono d'accordo. Mi stavo solo assicurando che la mia decisione fosse giusta. Non voglio nessuna presa su di me. :) – Jay

risposta

20

Throwable è una classe per tutte le situazioni non valide che possono verificarsi: Errori & Eccezioni.

Error è qualcosa, è non può gestire a tutti: OutOfMemoryError, VirtualMachineError, ecc

Exception è per casi eccezionali.

eccezioni sono disponibili in 2 gusti:

  1. RuntimeException s.

    Questi ultimi, si sono a conoscenza di: NullPointerException, ClassCastException, ecc

  2. Checked eccezioni.

    Queste sono le eccezioni, che il codice è a conoscenza di e dovrebbe essere esplicitamente catturato (... throws MyException): IOException s, ecc

Se si desidera che gli utenti del vostro codice, per gestire esplicitamente In alcune situazioni eccezionali, sarebbe opportuno estendere semplicemente lo Exception, non lo RuntimeException. Non è necessario prolungare lo Throwable.

4

Fondamentalmente si dovrebbe estendere la classe Exception mentre si sta creando Custom Exception. Exception e Error entrambi si estendono Throwable, Non ha senso estendere Throwable.

4

Throwable è la super classe di Error & Exception.

Come Exception, Error anche, può essere generato & gestito.

ma non è consigliabile, secondo il seguente documento:

Non è necessario per catturare oggetti di errore o sottotipi di errore. Puoi anche inviare un errore a te stesso (anche se a parte AssertionError hai probabilmente non lo vorrai mai), e puoi prenderne uno, ma di nuovo, probabilmente non lo farai con lo . Cosa, ad esempio, faresti effettivamente se avessi un errore OutOfMemoryError ?

Tenendo questo concetto in mente, vorrei suggerire di estendere Throwable se si vuole lanciare e/o prendere Exception & Error entrambi. Estendere Exception se si desidera lanciare e/o catturare solo Exception.