Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nur zeigt es mir bei ZahlGueltigAberZuKlein, ZahlGueltig und ZahlGueltigAberZuGross an:
Exception '....' has already been caught.
ZahlGueltigAberZuKlein und ZahlGueltigAberZuGross sind Unterklassen von ZahlGueltig und ZahlGueltig ist eine Unterklasse von InterruptedException. Kann mir jemand sagen was ich da verändern muss damit dieser Fehler nicht mehr kommt?
Das wird ja auch als "ist ein" Beziehung benannt. ZahlGueltigAberZuGross ist eine ZahlGueltig Exception. Damit wird das catch auf ZahlGueltig auch Exceptions abfangen die davon abgeleitet sind.
Die Regel hier ist also einfach: Immer erst die speziellen Exceptions abfangen und dann die generelleren. Oder direkt auf Deinen Code bezogen: Das Catch auf ZahlGueltig muss nach den davon abgeleiteten Exceptions geprüft werden.
Das wird ja auch als "ist ein" Beziehung benannt. ZahlGueltigAberZuGross ist eine ZahlGueltig Exception. Damit wird das catch auf ZahlGueltig auch Exceptions abfangen die davon abgeleitet sind.
Die Regel hier ist also einfach: Immer erst die speziellen Exceptions abfangen und dann die generelleren. Oder direkt auf Deinen Code bezogen: Das Catch auf ZahlGueltig muss nach den davon abgeleiteten Exceptions geprüft werden.
Diesen Fall müsste ich auch noch irgendwie abcatchen: "wenn gar nichts bekannt ist, weil gar nichts passiert ist und gar nichts zurückkommt". Gibt es dafür eine Exception, bzw wie soll ich das in meinen Codeblock einbauen?
Du könntest alle Exceptions fangen und im catch-Block anhand einer Map Exception-Klasse zu Nummer die Nummer setzen.
Natürlich musst Du auch auf die null reagieren, welche die Map bei unbekannter Exception liefert.
Letzten Endes erfolgt der Zusammenbau der Map auch im Code, das heisst, die Exceptions müssen bekannt sein.
Dann eben die Map anhand einer Datei zusammenbauen.
Aber letztendlich ist dies nach meiner Meinung nicht lösbar.
Mich hat mal jemand wegen meinem Codegenerator für Fluent Interface angerufen.
Der wollte für Gremlin (Abfrage-Sprache für NoSql-Datenbanken) fluent interfaces machen, also letztendlich Typ-Prüfung und Code-Generierung aber für Dinge, die dynamisch erst zur Laufzeit bekannt sind.
Das bringt z.B. in DOS/Windows Batchaufrufen was, wenn du nach Ausführung des Programms den Errorlevel abfragen willst (System.exit(errorlevel)). 0 steht dabei normalerweise für "alles ok", alles andere muss definiert werden.
Ich würde das Ganze aber anders angehen, ein Throwable abfangen und dann (z.B. mit instanceof) prüfen, um welche Exception es sich handelt.
So wie es oben steht, kann die Methode immer noch Exceptions werfen, da kein Default berücksichtigt ist.