java: kann nicht rethrow exception: Unhandled exception-Typ Exception
Ich würde gerne eine exception auffangen, melden Sie es, ein flag zu setzen, und die rethrow die gleiche Ausnahme
Habe ich diesen code:
public Boolean doJobWithResult() {
boolean result = true;
final Feed feed = Feed.findById(feedId);
try {
feed.fetchContents();
} catch (Exception ex) {
result = false;
Logger.info("fetching feed(%d) failed", feedId);
throw ex;
}
return result;
}
Aber eclipse meckert bei throw ex, zu sagen, dass "Unhandled exception-Typ Exception", und schlägt vor, mich zu fügen Sie einen try-catch-block, um es.
In der Tat, ich will den Prozess aufrufen dieser Methode die Ausnahme behandeln und nicht behandeln Sie mich... ich will nur true zurückgegeben, wenn alles ok ist, und melden Sie es, wenn es eine Ausnahme
Auf der anderen Seite kann ich wickeln Sie die Ausnahme innerhalb eine andere Ausnahme, aber ich kann nicht werfen das gleiche..
irgendeine Idee?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es gibt verschiedene Dinge, die hier zu erwähnen:
doJobWithResult()
Rückgabe true bei Erfolg und false bei einem Fehler, oder nichts zurück auf Erfolg und wirft eine exception im Fehlerfall.Beides gleichzeitig ist nicht möglich. Im ersten Fall, die Ausnahme abfangen, melden Sie es und geben Sie false zurück, im zweiten Fall ändern Sie Ihre Signatur zurück
void
und werfen eine Ausnahme und behandeln Sie in die Anrufer.Entweder eine exception zu werfen (in dem Fall der Anrufer zu tun hat), oder es fangen und behandeln (log it).
Exception
nicht der Aufrufer der Methode keine Ahnung, über das, was möglicherweise schief gehen in Ihrer Methode, es ist immer besser, mehr zu werfen, spezifische Ausnahmen oder wickeln eine Ausnahme in einer Benutzer-definierten ein-und rethrow es.Exception
ein Anrufer versucht sein könnten, fangenException
ohne zu bemerken, dass diese auch fangen jeden RuntimeException (seit seiner abgeleiteten ausException
), die möglicherweise nicht gewünschte Verhalten.Ihre doJobWithResult Methode muss deklarieren, dass er werfen kann-Ausnahme:
wird
Können Sie werfen die gleiche Ausnahme, wenn Sie hinzufügen
throws Exception
zu deiner Signatur der Methode.Ansonsten können Sie werfen eine RuntimeException.
In einem solchen Fall, werden Sie nicht brauchen, um anzugeben, dass
public Boolean doJobWithResult()
wirft etwas, aber stellen Sie sicher, dass Sie mit ihm umgehen später (zu fangen oder zu erwarten, dass dein thread zu beenden... es ist eine RuntimeException afterall).Wenn doJobWithResult nicht die Ausnahme behandelt werden, dann entfernen Sie die catch-block und fügen Sie "throws Exception", um die Signatur der Methode. Die Ausnahme Protokollierung erfolgt dabei in der Klasse/Methode, die zu tun haben mit der Ausnahme in eine entsprechende try/catch-block.
Seit
Exception
ist geprüft, eine alternative zu fangen dieException
ist zu erklären, Ihre Methode als wegwerfen:Gibt es keine Notwendigkeit, um das Ergebnis als falsch in den catch-block, da der Wert nicht zurückgegeben werden(da sind wir eine Ausnahme werfen).
Deine Methode sollte auch erklären, dass es eine exception wirft und so der Kunde gezwungen wird, es zu handhaben.
Auch erwägen, eine spezifische Ausnahme, die geworfen wird, in diesem speziellen Fall.
Hinzufügen
throws Exception
Ihrer Methode. Sie brauchen auch nicht hinzufügenresult = false;
in Ihremcatch
block.Ich denke, die Art und Weise Sie behandeln diese Ausnahme ist wirklich angemessen, wenn ein Ausfall der Einspeisung.fetchContents () - Methode kann nicht wiederhergestellt werden. (Idee ist besser zu stoppen, anstatt weiterhin)
Abgesehen davon, dass ich schlage vor, Sie verwenden mehr spezifische exception-Hierarchie.
Und eine andere Sache, die ich von effektiven java-Buch ist, wenn Sie schreiben, wie eine Methode müssen Sie das Dokument mit @zu werfen (in den Kommentaren) mit dem Grund.
Könnten Sie werfen eine ungeprüfte Ausnahme