ExceptionHandler

Status
Nicht offen für weitere Antworten.

Anyone

Mitglied
Guten Abend,

in unserem Leistungskurs für Technische Informatik konnte sich jede Gruppe (insgesamt 4 Gruppen) ein Softwareprojekt nach Wahl aussuchen. Wir haben uns für einen Autoverleih entschieden und ich bin für die konzeptionelle Ebene zuständig. Ich möchte unserem Projekt eine flexible Schnittstelle für die Implementierung weiterer ExceptionHandler anbieten und habe daher folgendes Interface:

Java:
public interface ExceptionHandler
{
    public void handleException(Exception e);
}

Des Weiteren habe ich auch zwei provisorische konkrete ExceptionHandler:

Java:
public class DefaultExceptionHandler implements ExceptionHandler
{
    public DefaultExceptionHandler(Exception e)
    {
        this.handleException(e);
    }

    public void handleException(Exception e)
    {
        System.out.println("Fehlermeldung: " + e.getMessage());
        System.out.println("Klassenname: "   + e.getClass());
        System.out.println("Stacktrace:  "   + e.getStackTrace());
        
        // Programmablauf wird unterbrochen
        System.exit(1);
    }
}

Java:
public class SQLExceptionHandler implements ExceptionHandler
{
    public SQLExceptionHandler(Exception e)
    {
        this.handleException(e);
    }
    
    public void handleException(Exception e)
    {
        System.out.println("Fehlermeldung: " + e.getMessage());
        System.out.println("SQL Status: "    + e.getSQLState());
        System.out.println("Klassenname: "   + e.getClass());
        System.out.println("Stack Trace: "   + e.getStackTrace());
        
        // Programmablauf wird unterbrochen
        System.exit(1);
    }
}

Mein Problem beschränkt sich darauf, dass vom Interface ein Objekt - ob direkt von Exception oder abgeleitet (so sollte es jedenfalls sein) - verlangt wird. Diese Methode habe ich natürlich in jeder ExceptionHandler-Klasse implementiert, jedoch scheint Java - logischerweise - immer von einer normalen Exception auszugehen. Jedoch möchte ich an dieser Stelle eine SQLException behandeln und dennoch auf eine einheitliche Schnittstelle zugreifen zu können. Ich habe es auch schon mit einer Dispatcher Klasse versucht, die je nach Art der Exception, jene Exception an die ExceptionHandler weiterleitet. Doch scheinbar kann der instanceof-Operator nicht für Exceptions verwendet werden. Was müsste ich tun, damit ich eine einheitliche Schnittstelle für konkrete ExceptionHandler gewährleisten kann?
 

Der Müde Joe

Top Contributor
Soweit mal eins: exit ist nie eine Lösung.
Eine Exception sollte immer dort gehadelt werden wo sie auftritt.
Wie teuer? 1.1a2 --> Opps keine Zahl..
Neue eingabe wird verlangt. Kein Sys.exit.
Exception können selten allgemein gehandandelt werden. (subjektive Meinung)
zB einen SQL Exception --> böse, da war was auch der weit oben falsch...
12a3 = Zahl .. da hat sich wer vertippt..neue eingabe und nochmal verifizieren...
(soviel mal von mir...)
 

Anyone

Mitglied
Soweit mal eins: exit ist nie eine Lösung.
Eine Exception sollte immer dort gehadelt werden wo sie auftritt.
Wie teuer? 1.1a2 --> Opps keine Zahl..
Neue eingabe wird verlangt. Kein Sys.exit.
Exception können selten allgemein gehandandelt werden. (subjektive Meinung)
zB einen SQL Exception --> böse, da war was auch der weit oben falsch...
12a3 = Zahl .. da hat sich wer vertippt..neue eingabe und nochmal verifizieren...
(soviel mal von mir...)

Wie gesagt, das waren nur provisorische Beispiel mit keinerlei Realitätsbezug. :)
Ich möchte ja keine allgemeine Abhandlung von Exceptions haben, sondern eine einheitliche Schnittstelle, damit das Programm je nach Exception unterschiedlich reagieren kann.
 

Der Müde Joe

Top Contributor
>Ich möchte ja keine allgemeine Abhandlung von Exceptions haben

Die sind NIE einheitlich. Sagen wir mal: Der User gibt eine falsche Zahl ein vs die Datenbank hat keine Connection
 

Marco13

Top Contributor
Und ich brauch' Schlaf...

Ich hatte da mit den Exceptions und Generics was falsch im Kopf - sowas compiliert zwar
Java:
interface ExceptionHandler<T extends Exception>
{
    public void handleException(T e);
}
class NPEHandler implements ExceptionHandler<NullPointerException>
{
    public void handleException(NullPointerException e)
    {
		System.out.println("null");
	}
}
class AIOOBandler implements ExceptionHandler<ArrayIndexOutOfBoundsException>
{
    public void handleException(ArrayIndexOutOfBoundsException e)
    {
		System.out.println("bounds");
	}
}
aber ob man sowas sinnvoll einetzen kann? Das bringt ja nur zur Compilizeit was, das war wohl nicht gemeint... ???:L

So, für heute reichts...

Grüße
Der Müde Marco13 :D
 

Anyone

Mitglied
>Ich möchte ja keine allgemeine Abhandlung von Exceptions haben

Die sind NIE einheitlich. Sagen wir mal: Der User gibt eine falsche Zahl ein vs die Datenbank hat keine Connection

??? Habe ich denn irgendwo erwähnt, dass Exceptions einheitlich sind? Das würde ja dem Sinn von Exceptions widersprechen! Ich möchte verschiedene konkrete Klassen, die mit verschiedenen Arten von Exceptions unterschiedlich umgehen. Beispielsweise könnte mir die SQLExceptionHandler Klasse nähere Daten zur Datenbankverbindung ausgeben, wogegen mir ein InvalidArgumentExceptionHandler nur das falsch eingegebene Argument ausgibt. Sofern das von Marco funktionieren sollte, ist das der von mir gesuchte Lösungsweg.

Vielen Dank

@era: Scheinbar scheint es bei mir nicht zu funktionieren. Falls du daran interessiert bist, kann ich ja morgen mal die Fehlermeldung hierein setzen.
 

Der Müde Joe

Top Contributor
Man geht mit Exceptions eigentlich sparsam um. Nicht alles ist eine Exception.

>Habe ich denn irgendwo erwähnt, dass Exceptions einheitlich sind?

Naja...

>dennoch auf eine einheitliche Schnittstelle zugreifen zu können.

Ausnahmen sind halt selten zu generalisieren.
 

Schumi

Bekanntes Mitglied
Also wenn Du Exceptions Typ-abhängig behandeln willst, solltest Du dies doch an Ort und Stelle tun. Dort weißt Du ja auch den Typ. Wenn Du sie allgemein in einem Handler abfängst ist es wohl eh zu spät für eine Typ-abhängige Behandlung.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben