Ich arbeite gerade an einem Projekt und ich bin auf ein bisschen Kopfzerbrechen gestoßen. Ich programmiere seit etwa zwei Jahren in Java und habe Ausnahmen behandelt, aber nie richtig verstanden.
In meiner aktuellen Situation habe ich meine Hauptmethode, die eine Klasse initialisiert
%Vor% Der Wikigraph-Konstruktor verwendet einen Dateinamen, den ich über eine DialogBox in der getFile()
-Methode erhalte.
Der Konstruktor für Wikigraph ruft dann eine Methode namens loadfile(filename)
auf, die versucht, die angegebene Datei zu laden und zu parsen.
In der loadfile()
-Methode werde ich einen IncorrectFileTypeError ausgeben.
Meine Frage ist, wo soll ich damit umgehen?
Im Moment fange ich es in der Methode loadfile()
Aber ich fange es auch bei der WikiGraph-Initialisierung so auf:
%Vor% Jetzt ist die Art, wie ich den Fehler behandelt habe, der richtige / beste Weg? Oder sollte es anderswo behandelt werden, wie in der Methode getFile()
?
EDIT: Ich nehme an, ich sollte das Dateiproblem etwas klarer machen. Die Dateierweiterung ist nicht das, worauf der IncorrestFileTypeError basiert, und daher kann es sich um einen irreführenden Fehlernamen handeln. Die angegebene Datei kann so ziemlich jede Erweiterung haben, deren Inhalt gut geformt sein muss.
In diesem Fall würde ich vermeiden, Ausnahmen als primäre Methode für den Umgang mit falschen Dateitypen zu verwenden. Wenn eine Ausnahme regelmäßig durch Benutzereingaben ausgelöst werden kann, sollte sie nicht als Ausnahme behandelt werden. Hier ist der Ansatz, den ich nehmen würde:
Dieser Ansatz bietet Ihnen das Beste aus beiden Welten - Sie haben die Möglichkeit, Benutzer zu warnen, wenn ungültige Daten zur Verfügung gestellt werden, und stellen gleichzeitig aus WikiGraphs Sicht sicher, dass die bereitgestellten Informationen korrekt sind. Es gibt Entwicklern, die gegen einen WikiGraph arbeiten, die Möglichkeit, sicherzustellen, dass ihre Eingaben gültig sind, ohne dass eine Ausnahme erforderlich ist.
Einer der Hauptvorteile von Ausnahmen besteht darin, dass sie Ihnen eine bequeme Möglichkeit bieten, eine Ausnahme weit entfernt von ihrem Auftreten zu behandeln. In Sprachen, die dies nicht unterstützen, müsste jeder Aufruf des Pfades den Rückgabewert überprüfen, brechen und zurückgeben, sodass Sie manuell propagieren.
Es ist sinnvoll, die Ausnahme zu behandeln, bei der Sie das Gefühl haben, dass Sie sie entweder wiederherstellen oder am besten melden und den Vorgang abbrechen können.
Nach meinem Verständnis beginnt die Interaktion mit der Eingabe von Benutzeroberflächen. Wenn der Dateityp nicht geeignet ist, können Sie nicht wirklich wiederherstellen. Daher würde ich jede UI-Aufgabe, die die Datei initiiert hat, die Ausnahme abfangen, dem Benutzer melden, dass ein Fehler aufgetreten ist, und entweder abbrechen oder nach einer anderen Eingabe fragen.
Beim zweiten Lesen scheint es, als ob Sie den Dialog öffnen, nachdem Sie bereits damit begonnen haben, das Diagramm zu erstellen. Ich persönlich möchte die UI-Interaktion isolieren. Ich würde daher persönlich zuerst alle Eingaben der Benutzeroberfläche bearbeiten, den erwarteten Dateinamen abrufen, überprüfen, ob er meinen Anforderungen entspricht, dem Benutzer Bericht erstatten, falls nicht, und nur weitermachen, wenn die Datei in Ordnung ist, und dann nur kritische und unerwartete Fehler melden.
Ich halte es nicht für sinnvoll, es in loadfile
zu erfassen. Sie können immer noch eine Protokollnachricht schreiben (benutzen Sie System.err
), tun Sie es einfach, bevor Sie die Ausnahme auslösen. Sie sind auf dem richtigen Weg, wenn Sie die Ausnahme abfangen, bei der Sie etwas dagegen tun können (in diesem Fall wird der Benutzer erneut aufgefordert).
Wenn das Problem darin besteht, dass der Benutzer eine Datei vom falschen Typ gewählt hat, dann sollten Sie den Code nicht so weit laufen lassen. Dies scheint nicht wirklich eine Ausnahme zu sein, sondern eher ein Pfad im Programm. Wenn der Benutzer einen falschen Dateityp ausgewählt hat, sollte er die Wahl haben, die Datei erneut auszuwählen. Offensichtlich sollten Sie die Auswahlmöglichkeiten im JFileChooser auf Dateien des richtigen Typs beschränken, wenn es so einfach ist, die Erweiterung zu betrachten.
Ich denke, dies ist die Art von Situation, für die die überprüften Ausnahmen entworfen wurden (ob Sie ihnen zustimmen oder nicht). Ich nehme an, dass IncorrectFileTypeError
erweitert Error
? Erweitern von RuntimeException
wäre besser geeignet, und das Erweitern von IOException
wäre noch besser, da diese Art von Fehlern durch gültige Benutzereingaben ausgelöst werden kann (dh durch Eingabe des Namens einer Datei, die existiert, aber den falschen Typ hat.)
Ich glaube, dass dieser Fehlertyp (IncorrectFileTypeError) im Benutzereingabeformular aufgelöst werden kann, wodurch eine unnötige Hinwendung zur Dateisystemdienstschicht vermieden wird.
Tags und Links java exception-handling exception