Ich habe eine Methode, Timing-Informationen jeder Operation zu speichern:
%Vor%Ich rufe die obige Methode nach jeder Operation auf. Was zählt, ist die Operation selbst, während das Timing nur eine Nebenaufgabe ist. Deshalb habe ich beschlossen, nichts zu tun, wenn die Methode fehlschlägt, außer sie zu protokollieren.
Aber mir wurde immer gesagt, dass das Protokollieren ohne die Ausnahme zu handhaben eine schlechte Übung ist. Also, wie soll ich den obigen Code umschreiben?
Wenn Sie die Konsequenzen kennen, d. h. der Aufruf timer.queue()
könnte unterbrochen werden und die Daten nicht in eine Warteschlange stellen, und Sie können damit leben, dann ist es in Ordnung, die Ausnahme zu ignorieren. Wie bei den meisten Regeln müssen Sie wissen, wann sie zu brechen sind.
Allerdings würde ich Ihre Entscheidung mit einem Kommentar im catch-Block dokumentieren, so dass derjenige, der später den Code verwaltet, weiß, dass das Nichthandeln der Ausnahme kein Versehen war, sondern eine bewusste Entscheidung.
Aber mir wurde immer gesagt, dass das Protokollieren ohne die Ausnahme zu verwalten eine schlechte Übung ist
Was bedeutet "verwalten"? Sie wiedersehen? Befolgen Sie die Schritte 1, 2, 3 blind, weil "zOMG eine Ausnahme ausgelöst wurde !! 111"?
Wenn Sie blindeste Best Practices und andere Arten von Ratschlägen befolgen, unabhängig von Ihrem Kontext, dann werden Sie wahrscheinlich mit wirklich problematischen und peinlichen Entscheidungen enden. Tu nichts, nur weil es die beste Übung ist. Bestätigen Sie die besten Praktiken, aber stellen Sie gleichzeitig sicher, dass sie in Ihrer Situation tatsächlich Sinn ergeben.
Fragen Sie sich selbst: Macht diese Ausnahme einen Unterschied? Verletzt es einen Vertrag? Ändert es den Ablauf Ihrer Anwendung? Wollen Sie das wirklich nicht und wenn, dann ist die Situation wirklich außergewöhnlich und Sie sollten wirklich damit irgendwie umgehen?
Wenn es keinen Unterschied macht und so weiter, dann ist es einfach akzeptabel, es einfach zu loggen. Es hängt wirklich von Ihrem Kontext und von der Bedeutung Ihrer Ausnahme ab.
LE: Natürlich, wie Thomas vorschlägt, möchten Sie vielleicht Ihre Entscheidung dokumentieren.
InterruptedException
ist speziell, weil es keinen Fehler signalisiert.
Wenn eine Methode eine InterruptedException
deklariert, sagt sie, dass es sich um eine Blockierungsmethode handelt, die durch Unterbrechen ihres Threads abgebrochen werden kann.
Brian Goetz erklärt :
Wenn eine Methode InterruptedException auslöst, sagt sie Ihnen Folgendes: if Der Thread, der die Methode ausführt, wird unterbrochen versuchen Sie zu stoppen, was es tut, und kehren Sie früh zurück und zeigen Sie es an Frühzeitige Rückkehr durch InterruptedException. Braves Blockieren Bibliotheksmethoden sollten auf Unterbrechung und Werfen reagieren InterruptedException, damit sie innerhalb von abbrechbaren Aktivitäten verwendet werden können ohne Kompromisse bei der Reaktionsfähigkeit.
Sie sollten entweder
throws InterruptedException
hinzu
Runnable
), rufen Sie Thread.getCurrentThread().interrupt();
Wenn Sie nur die Ausnahme verschlucken, beeinträchtigen Sie die Reaktionsfähigkeit Ihrer Anwendung.