Ich möchte eine Ausnahme abfangen, sie protokollieren, ein Flag setzen und die gleiche Ausnahme erneut auslösen
Ich habe diesen Code:
%Vor%Aber Eclipse beschwert sich bei "thr ex" und sagt "Unhandled exception type Exception" und schlägt mir vor, einen try-catch-Block darum zu legen.
Tatsächlich möchte ich, dass der Prozess diese Methode aufruft, um die Exception zu behandeln und nicht selbst. Ich möchte nur true zurückgeben, wenn alles in Ordnung ist, und es protokollieren, wenn es eine Ausnahme gibt
Auf der anderen Seite kann ich die Ausnahme in eine andere Ausnahme einfügen, aber ich kann die gleiche nicht werfen.
irgendeine Idee?
Ich denke, es gibt verschiedene Dinge zu erwähnen:
doJobWithResult()
bei Erfolg true zurückgeben und bei einem Fehler false, oder bei Erfolg nichts zurückgeben und bei einem Fehler eine Ausnahme auslösen.
Beides ist zur selben Zeit nicht möglich. Im ersten Fall fangen Sie die Exception ab, melden Sie sie an und geben Sie false zurück, im zweiten Fall ändern Sie Ihre Signatur, um void
zurückzugeben, und werfen Sie eine Ausnahme und behandeln Sie sie im Aufrufer. Exception
dem Aufrufer Ihrer Methode keinen Hinweis darauf gibt, was möglicherweise in Ihrer Methode schief gehen könnte. Es ist immer besser, spezifischere Ausnahmen auszulösen oder eine Ausnahme in eine benutzerdefinierte einzufügen wiederhole es. Exception
übergeben, ist ein Aufrufer möglicherweise versucht, Exception
abzufangen, ohne zu bemerken, dass dadurch auch jede RuntimeException abgefangen wird (da sie von Exception
abgeleitet ist), was möglicherweise nicht erwünscht ist. Ihre doJobWithResult-Methode muss deklarieren, dass sie Exception auslösen kann:
%Vor%wird
%Vor% Sie können dieselbe Ausnahme auslösen, wenn Sie throws Exception
zu Ihrer Methodensignatur hinzufügen.
Andernfalls können Sie eine RuntimeException auslösen.
In einem solchen Fall müssen Sie nicht angeben, dass public Boolean doJobWithResult()
etwas auslöst, aber stellen Sie sicher, dass Sie es später richtig behandeln (fangen Sie an oder erwarten Sie, dass Ihr Thread aufhört ... es ist eine RuntimeException).
Wenn doJobWithResult nicht mit der Ausnahme umgehen muss, entfernen Sie den catch-Block und fügen Sie der Methodensignatur "throws Exception" hinzu. Die Ausnahmeprotokollierung kann in der Klasse / Methode erfolgen, die in einem entsprechenden try / catch-Block mit der Exception umgehen muss.
Da Exception
überprüft ist, ist es eine Alternative, die Exception
zu erfassen Deklarieren Sie Ihre Methode so, dass sie es auslöst:
Es ist nicht notwendig, das Ergebnis im catch-Block als false festzulegen, da der Wert nicht zurückgegeben wird (da wir eine Ausnahme auslösen).
Ihre Methode sollte auch deklarieren, dass sie eine Ausnahme auslöst, und der Client wird gezwungen sein, damit umzugehen.
Überlegen Sie auch, eine spezifischere Ausnahme zu verwenden, die in diesem speziellen Fall ausgelöst wird.
Fügen Sie throws Exception
zu Ihrer Methode hinzu. Sie müssen auch result = false;
in Ihrem catch
-Block nicht hinzufügen.
Ich denke, dass die Art und Weise, wie Sie mit dieser Ausnahme umgehen, wirklich angemessen ist, wenn ein Fehler der feed.fetchContents () -Methode nicht wiederhergestellt werden kann. (Idee ist besser aufzuhören als weiterzumachen) Abgesehen davon würde ich vorschlagen, dass Sie eine spezifischere Ausnahmehierarchie verwenden.
Und eine andere Sache, die ich von effektivem Java-Buch bekommen habe, ist, wenn Sie solch eine Methode schreiben, müssen Sie mit @throw (in den Kommentaren) mit dem Grund dokumentieren.
Tags und Links java exception-handling exception