2015-02-22 15 views
6

Mam następujący kod:Jak ignorować Wyjątki w Javie

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

chciałbym wykonać: test.setSomething2(0); nawet jeśli test.setSomething(0) (linia nad nim) wyrzuca wyjątek. Czy istnieje sposób, aby to zrobić inne niż:

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

mam dużo test.setSomething w rzędzie i wszystkie z nich mogą zgłaszać wyjątki. Jeśli tak, po prostu chcę pominąć tę linię i przejść do następnej.

Dla wyjaśnienia, nie obchodzi mnie, czy zgłasza wyjątek, i nie mogę edytować kodu źródłowego kodu, który zgłasza ten wyjątek.

TO JEST PRZYPADEK, GDZIE NIE ZAPOTRZEBUJĘ O WYJĄTKÓW (proszę nie używać powszechnie ujętych ilościowo stwierdzeń, takich jak "nie należy nigdy ignorować Wyjątków"). Ustawiam wartości jakiegoś Obiektu. Kiedy przedstawiam wartości dla użytkownika, sprawdzam czy null tak czy tak, więc nie ma znaczenia, czy któryś z wierszy kodu zostanie wykonany.

+5

Powinieneś ** nigdy ** nie ignorować wyjątków. Powinieneś ** nigdy ** nie złapać 'wyjątku'.Albo planujesz złapać i obsłużyć wyjątek ** special **, albo nie możesz go obsłużyć, i pozwolić, aby przesiąkł do stosu. –

+2

usuwa 'throws' z sygnatury metody' setSomething1 (int a); ' –

+1

Z mojego doświadczenia wynika, że" prawdopodobnie nie będzie "* prawie na pewno będzie *, po prostu według Prawa Murphy'ego. A jeśli ukryłeś wyjątek, nie będziesz wiedział, kiedy to się stanie. –

Odpowiedz

12

bym poważnie wątpić w zdrowie psychiczne dowolnego kodu testowego, który ignoruje wyjątki wyrzucone z testowanego kodu. To powiedziawszy i zakładając, że wiesz, co robisz ... nie ma sposobu, aby zasadniczo zignorować odrzucony wyjątek. Najlepsze, co można zrobić, to zminimalizować boilerplate trzeba owinąć kod wyjątku rzucających w

Jeśli jesteś na Java 8, można to wykorzystać.

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

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

Wtedy i sugerując importu statycznych Twój kod staje

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

Interesujące. Mindblown;) – CKing

+0

Czy mogę zrobić coś takiego? >> 'ignoringExc (() -> {/ * kod wewnątrz * /});' –

1

Niestety nie, nie ma i jest to z założenia. Przy prawidłowym użyciu wyjątki nie powinny być ignorowane, ponieważ wskazują, że coś nie działa i prawdopodobnie nie powinieneś kontynuować swojej normalnej ścieżki wykonywania. Całkowicie ignorowanie wyjątków jest przykładem wzorca antypoślizgowego "Sweep it under the carpet", dlatego też język nie ułatwia tak łatwo.

Być może powinieneś sprawdzić, dlaczego TestClass.setSomething rzuca wyjątki. Czy cokolwiek próbujesz "przetestować" będzie naprawdę ważne, jeśli kilka metod setera nie działa poprawnie?

0

Nie należy ignorować wyjątków. Powinieneś sobie z nimi radzić. Jeśli chcesz, aby twój kod testowy był prosty, dodaj blok try-catch do swoich funkcji. Najlepszym sposobem na ignorowanie wyjątków jest zapobieganie im poprzez odpowiednie kodowanie.

1

Nie można ignorować wyjątków w Javie. Jeśli metoda deklaruje możliwość rzucenia czegoś, ponieważ coś ważnego nie może zostać wykonane, a błąd nie może być poprawiony przez projektanta metod. Więc jeśli naprawdę wa uprościć swoje życie hermetyzacji wywołanie metody w innej metody jak ta:

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) {} 
} 

i nazwać, kiedy trzeba go:

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

używać słowa ignore po słowie kluczowym Exception.

+4

ignore to nazwa przypisana do wyjątku, nie ma znaczenia, jakie imię podasz –