mal angenommen, ich habe eine Methode die ein Dokument einliest und überprüft, ob ein bestimmter Wert vorhanden ist. Ist dieser Wert vorhanden gibt die Methode mir Text aus dem Dokument zurück. Ist dieser Wert nicht vohanden gibt die Methode nichts zurück.
Meine Frage ist nun, ob es angebrachter ist "null" zurückzugeben oder lieber eine Exception werfen?
@TO
Das was du beschreibst wäre sog. "Missbrauch von Exceptions" was man laut Conventions vermeiden sollte. Es ist besser fest definierte "Fehler-returns" zu nutzen (also "null" oder "-1" oder der gleichen) anstatt wild mit Exceptions um sich zu werfen.
Auch muss man bei Exceptions zwischen checked und unchecked unterscheiden. Unchecked Exceptions sind RuntimeException und alles was davon erbt. Man sollte während der Entwicklung beim debuggen sicher gehen das keine Unchecked Exceptions geworfen werden und schon gar nicht versuchen diese in try-catch Blöcken zu verarbeiten, denn das ist ein Zeichen für ziemlich schlechten Code.
Als kleines Beispiel vielleicht mal "Thread" :
natürlich kann man einen Thread von außen mit Thread.interrupt() "gewaltsam" abbrechen, sollte man aber vermeiden. Der saubere Weg einen Thread zu beenden ist innerhalb des Threads immer wieder auf ein Laufzeitflag zu prüfen was von außen über einen Setter gesteuert werden kann. Dieses Beispiel kann man auf ziemlich viele andere Fälle übertragen.
Die einzige Ausnahme (meines Wissens) stellen "blocking Methods" dar, also z.B. InputStream.read().
In wie weit es hier "best-practice" gibt wird wohl von Fall zu Fall verschieden sein, aber bewusst Exceptions provozieren (gerade RuntimeException) sollte man wirklich nur als aller letzte Möglichkeit nutzen wenn es wirklich überhaupt nicht anders geht.
1. Das Dokument muss in der ersten Zeile eine Kennung tragen, ohne diese Kennung liegt ein Protokollfehler vor.
2. Im Dokument gibt es eine einfache Suche, ein Suchwort kann enthalten sein, muss aber nicht.
Im ersten Fall wirft man eine Ausnahme, weil in interner Fehler vorliegt. Da die Kennung in der Datei sein muss, darf dieser Fehler nicht untergehen und ein Ausnahme zeigt das perfekt an. Ob checked oder unchecked steht auf einem anderen Blatt.
Im zweiten Fall ist eine Ausnahme unangebracht, da es kein Fehler ist, wenn der Suchstring nicht im Dokument ist. Vergleiche das mit String indexOf() oder String matches() -- das würde ja auch keine Ausnahmen werfen, wenn es keine Übereinstimmung gibt.