2015-02-22 4 views
6

ho il seguente codice:Come ignorare eccezioni in Java

TestClass test=new TestClass(); 
test.setSomething1(0); //could, but probably won't throw Exception 
test.setSomething2(0); //could, but probably won't throw Exception 

Vorrei eseguire: test.setSomething2(0); anche se test.setSomething(0) (la linea sopra di esso) genera un'eccezione. C'è un modo per fare questo tranne:

try{ 
    test.setSomething1(0); 
}catch(Exception e){ 
    //ignore 
} 
try{ 
    test.setSomething2(0); 
}catch(Exception e){ 
    //ignore 
} 

Ho un sacco di test.setSomething di fila e tutti loro potrebbe gettare eccezioni. Se lo fanno, voglio solo saltare quella linea e passare a quella successiva.

Per chiarimenti, non mi interessa se genera un'eccezione e non riesco a modificare il codice sorgente del codice che genera questa eccezione.

QUESTO È UN CASO IN CUI NON FACCIO A CAUSA DELLE ECCEZIONI (per favore non usare affermazioni universalmente quantificate come "non si dovrebbe mai ignorare Eccezioni"). Sto impostando i valori di alcuni oggetti. Quando presento i valori a un utente, eseguo comunque controlli nulli, quindi non importa se una qualsiasi riga di codice viene eseguita.

+5

Si dovrebbe ** mai ** ignorare le eccezioni. Dovresti ** mai ** catturare "Eccezione".O stai pianificando di catturare e gestire un'eccezione ** specifica ** o non puoi gestirla, e lasciarla percolarsi sullo stack. –

+2

rimuovere 'throws' dalla firma del metodo di' setSomething1 (int a); ' –

+1

Nella mia esperienza affermando" probabilmente non lo farò "* quasi certamente lo farò *, semplicemente con la legge di Murphy. E se hai nascosto l'eccezione, non saprai quando lo farà. –

risposta

12

vorrei seriamente in dubbio la sanità mentale di qualsiasi codice di test che ignori le eccezioni generate dal codice testato. Detto questo, e supponendo che tu sappia cosa stai facendo ... non c'è modo di ignorare fondamentalmente un'eccezione generata. Il meglio che si può fare è ridurre al minimo il boilerplate è necessario avvolgere il codice di eccezione-gettando in

Se siete su Java 8, è possibile utilizzare questo:.

public static void ignoringExc(RunnableExc r) { 
    try { r.run(); } catch (Exception e) { } 
} 

@FunctionalInterface public interface RunnableExc { void run() throws Exception; } 

Poi, e che implica importazioni statiche , il codice diventa

ignoringExc(() -> test.setSomething1(0)); 
ignoringExc(() -> test.setSomething2(0)); 
+0

Interessante. Mindblown;) – CKing

+0

Posso fare qualcosa di simile? >> 'ignoringExc (() -> {/ * code inside * /});' –

1

Purtroppo no, non c'è, e questo è per intenzione. Se utilizzate correttamente, le eccezioni non dovrebbero essere ignorate in quanto indicano che qualcosa non ha funzionato e che probabilmente non si dovrebbe continuare il normale percorso di esecuzione. Ignorare completamente le eccezioni è un esempio dell'anti-pattern 'Sweep it under the rug', che è il motivo per cui il linguaggio non supporta così facilmente.

Forse dovresti vedere perché TestClass.setSomething lancia eccezioni. Qualunque cosa tu stia cercando di 'testare' sarà davvero valido se un gruppo di metodi setter non funziona correttamente?

0

Non si devono ignorare le eccezioni. Dovresti gestirli. Se vuoi semplificare il codice di prova, aggiungi il blocco try-catch alle tue funzioni. Il modo migliore per ignorare le eccezioni è quello di prevenirli tramite una corretta codifica.

1

Non è possibile ignorare l'eccezione in Java. Se un metodo dichiara di essere in grado di lanciare qualcosa, questo perché qualcosa di importante non può essere fatto e l'errore non può essere corretto dal progettista del metodo. Quindi, se davvero wan't per semplificare la vita incapsulare la chiamata al metodo in qualche altro metodo come questo:

class MyExceptionFreeClass { 
    public static void setSomething1(TestClass t,int v) { 
    try { 
     t.setSomething1(v); 
    } catch (Exception e) {} 
    public static void setSomething2(TestClass t,int v) { 
    try { 
     t.setSomething2(v); 
    } catch (Exception e) {} 
} 

e lo chiamano quando ne avete bisogno:

TestClass test=new TestClass(); 
MyExceptionFreeClass.setSomething1(test,0); 
MyExceptionFreeClass.setSomething2(test,0); 
0
try { 
// Your code... 
} catch (Exception ignore) { } 

Usare la parola ignore dopo la parola chiave Exception.

+4

ignore è il nome che si assegna all'eccezione, non importa quale nome si assegna –