Exceptions für's ganze Package

Status
Nicht offen für weitere Antworten.

Reinski

Mitglied
Tach zusammen,

ich habe ein Package mit mehreren Klassen, die mitunter die selben Exceptions werfen können.
Manche Exceptions sollen public sein, andere werden nur innerhalb des Packages verwendet.

Wo deklariert man die Exceptions am besten? Muss ich jede einzelne Exception tatsächlich in ein eigenes File stecken (sonst meckert nämlich mein Compiler bzw. die NetBeans-IDE)?

Wenn ich zB. die Exceptions so deklariere:
Code:
public class Oberklasse {
    ...
    public class Exception1 extends Exception{ 
        ... 
    }    
    public class Exception2 extends Exception{ 
        ... 
    }    
}
kann ich leider nicht wie gewünscht darauf zugreifen:
Code:
public class AndereKlasse {
    ...
    public void macheIrgendEtwas { 
        ... 
        throw new Oberklasse.Exception1();
    }
}
meckert er: An enclosing instance that contains Oberklasse.Exception1 is required!

Wie macht man das am professionellsten?
Gruß!

reinski
 

Illuvatar

Top Contributor
Du könntest die Exceptionklassen static machen, dann würde das genau so funktionieren. Die übliche Vorgehensweise wäre allerdings doch, jede Exception in eine eigene Quellcodedatei zu packen. Bzw., wenn du die nur in dem package brauchst, kannst du auch weglassen, die public zu machen, dann gehen auch mehrere in eine Quellcodedatei. Aber IMO gibt es schlimmeres als ein paar .java-Dateien für Exceptions ;)
 

Reinski

Mitglied
Illuvatar hat gesagt.:
Du könntest die Exceptionklassen static machen, dann würde das genau so funktionieren. Die übliche Vorgehensweise wäre allerdings doch, jede Exception in eine eigene Quellcodedatei zu packen. Bzw., wenn du die nur in dem package brauchst, kannst du auch weglassen, die public zu machen, dann gehen auch mehrere in eine Quellcodedatei. Aber IMO gibt es schlimmeres als ein paar .java-Dateien für Exceptions ;)
ok, danke, dann werd ich's so (die public jeweils in ne eigene Datei) machen. :)
Gruß!

reinski
 

Reinski

Mitglied
Hm, ich hab jetzt eine neue Datei erstellt mit dem Inhalt:
Code:
package DBClasses;

class DBDriverFailure extends Exception{ 
}

class DBConnectionFailure extends Exception{ 
}    

class DBKeyNotFound extends Exception{
}
aber wenn ich die in einer anderen Datei/Klasse im selben Package werfen will mit
Code:
public class AndereKlasse {
    ...
    void MacheIrgendEtwas() {
        ...
        throw new DBKeyNotFound();
    }
}
erkennt der Compiler sie nicht und die IDE bietet mir an ein Import für DBClasses.DBKeyNoFound anzulegen, was dann aber witzigerweise nichts am Fehler ändert. Auch eine explizite Qualifizierung
Code:
throw new DBClasses.DBKeyNotFound();
schafft keine Abhilfe.
Mache ich noch was falsch?
Gruß!

reinski
 

Reinski

Mitglied
Erstmal vorneweg:
in meinem Code-Beispiel hätte es natürlich heissen müssen:
Code:
void MacheIrgendEtwas() throws DBKeyNotFound {
    ...
}
aber das war nur ein Tippfehler und nicht der Grund des Problems.

Inzwischen habe ich gemerkt, dass das Halten mehrerer Klassen in einer Datei vielleicht doch problematisch ist, denn die Sache funktioniert plötzlich, wenn ich den Code folgendermaßen abändere:
:
Code:
void MacheIrgendEtwas() throws DBDriverFailure, DBKeyNotFound {
    ...
}
d.h. wenn die erste Klasse in der Datei vorher verwendetet wird, erkennt der Compiler auch die folgenden Klassen.

Ist das ein Bug oder ein Feature der NetBeans-IDE 5.0 bzw. des Compilers??
 

Leroy42

Top Contributor
Reinski hat gesagt.:
Ist das ein Bug oder ein Feature der NetBeans-IDE 5.0 bzw. des Compilers??

So ähnlich: Es wäre ein Bug NetBeans wenn es ein Feature wäre. :autsch: :cool:

Jeder Java-Compiler muß sich an die Java-Sprachspezifikation halten, sonst gäb's Chaos.

Ich vermute eher, daß, da du alle deine Exceptions in einer Datei sammeln
willst und nur eine Klasse pro Datei public sein kann, diese fehlenden public-Modifier
das Problem sind.

Es reicht doch all deine Exceptions in einem Package zu sammeln. Also für
jede Exception eine eigene Datei, sodaß diese dann alle public sein können.
 

Reinski

Mitglied
Naja, vielleicht ist ja dieser Fall (gar keine public, aber mehrere package-private Classes in derselben Datei) in den Spezifikationen gar nicht definiert und das Verhalten des Compilers deshalb ebenfalls nicht.

Aber da ausser mir niemand ein Problem damit zu haben scheint, für jeweils zwei Zeilen Code
Code:
class DBDriverFailure extends Exception{ 
}
eine eigene Datei anzulegen, frage ich mal blöd:
Bin ich vielleicht total auf dem Holzweg und ist es vielleicht professioneller, eine eigene Exception-Klasse für das ganze Package zu erstellen und diese mit Eigenschaften zu versehen, die die konkreten Exceptions unterscheidbar machen?
Oder ist mein bisheriges Vorgehen so üblich in Java?
Gruß!

reinski
 

Leroy42

Top Contributor
Ich selbst habe zwar noch keine Exception-Hierarchie entworfen
(ich weiß noch nicht mal wie man das schreibt :oops: ), aber
eine Klasse wie
Code:
class DBDriverFailure extends Exception{ 
}
die de facto nur einen neuen Namen für ein- und dieselbe Exception vergibt
und sonst gar nichts ändert/erweitert macht für mich keinen Sinn.

Sieh dir doch mal die Klassen IOException oder SQLException an.
Da wird über eine Klasse auch jeweils alles mögliche abgehandelt
und die aktuelle Exception einfach in die Fehlermeldung selbst
gepackt.

Außerdem würde es mich nerven, all deine Exception einzeln abzufangen...
 

Reinski

Mitglied
Leroy42 hat gesagt.:
Außerdem würde es mich nerven, all deine Exception einzeln abzufangen...
Das ist allerdings auch ein Argument... ;-)

Ich werd's jetzt so machen, dass ich die Exceptions in Kategorien unterteile, zB. DB-Zugriff und Sonstige. Für jede Kategorie gibt es dann maximal eine öffentliche Exception-Klasse und eine package-private.
Erweitert sind die Klassen um die Methode getError() und das sieht dann zB. so aus:
Code:
public class DBException extends Exception {
    private DBError error;
    public static enum DBError {
        ERROR_DB_DRIVER,
        ERROR_DB_CONNECTION
    }
    
    /**
     * Creates a new instance of DBException
     */
    DBException(DBError err) {
        super();
        error = err;
    }
    public DBError getError() {
        return error;
    }
}
Natürlich kann man das noch verfeinern, zB. mit mehr Attributen und Konstruktoren.

Geworfen wird eine Exception dann zB. mit
Code:
        try {
            // create and start JDBC object for  the database access
            Class.forName(driverName);
            this.driverName = driverName;
        } catch (ClassNotFoundException ex) {
            throw new DBException(DBException.DBError.ERROR_DB_DRIVER);
        }
Jetzt hoff ich halt nur noch, dass sich dieser Ansatz als praktikabel erweist. :)
Danke für die Anregungen soweit... ;-)
Gruß!

reinski
 

Murray

Top Contributor
Gerade die IOException halte ich eher für ein abschreckendes Beispiel, weil man dem Benutzer eigentlich nicht viel mehr präsentieren kann als "Unbekannter Fehler", ohne die String-Repräsentatitio nder Exception zu analysieren (und das ist Pfui).

Alle Exceptions einzeln zu deklarieren bzw. abzufangen ist natürlich auch lästig und führt früher oder später dazu, dass jemand eben wieder ganz gloabl java.lang.Excepion behandelt.

Ich bevorzuge da einen Zwischenweg:

Code:
public abstract class DBException extends Exception {
}

public class DBDriverNotFoundException extends DBException {
}

public class DBNotSupportedException extends DBException {
}

So kann man als Verwender selbst entscheiden, ob man sich für die spezifischen Ausprägungen interessiert, oder ob man es bei der Behandlung der allgemeinen Basisklasse belässt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Compiler-Fehler Drei Exceptions in GUIHack für Dreiecke auf MoveButtons Java Basics - Anfänger-Themen 36
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
C Exceptions identifizieren Java Basics - Anfänger-Themen 5
A Exceptions mit objektreferenzen Java Basics - Anfänger-Themen 4
A Exceptions und methods Java Basics - Anfänger-Themen 2
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
A Exceptions und Packages Java Basics - Anfänger-Themen 6
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
X Exceptions Benutzereingaben Java Basics - Anfänger-Themen 4
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
L Exceptions und Konten Java Basics - Anfänger-Themen 21
D Frage zu Exceptions Java Basics - Anfänger-Themen 8
I Wie programmiert man Exceptions? Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
C Erste Schritte Exceptions nicht verstanden Java Basics - Anfänger-Themen 2
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
J Exceptions Java Basics - Anfänger-Themen 69
C Exceptions Java Basics - Anfänger-Themen 8
C Exceptions Java Basics - Anfänger-Themen 6
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
F Exceptions Java Basics - Anfänger-Themen 6
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
S Exceptions Java Basics - Anfänger-Themen 7
M Vererbung Problem Vererbung/Exceptions Java Basics - Anfänger-Themen 9
S Verschachtelte Exceptions - Übersicht verbessern Java Basics - Anfänger-Themen 2
J Eclipse Exceptions Java Basics - Anfänger-Themen 2
K Schleifen und Exceptions Java Basics - Anfänger-Themen 8
K Exceptions auslagern Java Basics - Anfänger-Themen 15
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
F Erste Schritte Übung zu Exceptions Java Basics - Anfänger-Themen 24
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Int Exceptions Java Basics - Anfänger-Themen 12
M Exceptions per throws oder try Java Basics - Anfänger-Themen 4
M Compiler-Fehler Queue als ArrayList mit Exceptions Java Basics - Anfänger-Themen 3
T Exceptions in einer Klasse Java Basics - Anfänger-Themen 3
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
H Methoden Überflüssige Exceptions Java Basics - Anfänger-Themen 20
C Exceptions Java Basics - Anfänger-Themen 14
1 While Schleife Exceptions Java Basics - Anfänger-Themen 6
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
D Frage zu Exceptions Java Basics - Anfänger-Themen 12
M Compiler-Fehler Exceptions lieber throwen oder direkt catchen? Java Basics - Anfänger-Themen 8
T Exceptions Java Basics - Anfänger-Themen 19
B Wie finde ich Exceptions? Java Basics - Anfänger-Themen 19
Dit_ Input/Output Alle Exceptions protokollieren Java Basics - Anfänger-Themen 9
T Exceptions Java Basics - Anfänger-Themen 12
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
F Exceptions werfen oder catchen?? Java Basics - Anfänger-Themen 14
D Exceptions - Ausnahmebehandlung Java Basics - Anfänger-Themen 19
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
J Paar Fragen zu Exceptions Java Basics - Anfänger-Themen 16
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
C Exceptions beim Beenden Java Basics - Anfänger-Themen 2
C TimerTask und Exceptions Java Basics - Anfänger-Themen 5
E Klasse öffnen, mehrere Exceptions Java Basics - Anfänger-Themen 9
C Exceptions Java Basics - Anfänger-Themen 7
G 2 Exceptions in einer Methode Java Basics - Anfänger-Themen 3
firefexx Exceptions werfen Java Basics - Anfänger-Themen 5
0 Exceptions mehrfach fangbar? Java Basics - Anfänger-Themen 4
O Exceptions Java Basics - Anfänger-Themen 3
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
H Diverse Exceptions - Troubleshooting Java Basics - Anfänger-Themen 3
J exceptions Java Basics - Anfänger-Themen 8
sc0p InterruptedExceptions und Exceptions - in Einem! Java Basics - Anfänger-Themen 5
M Frage zu Exceptions Java Basics - Anfänger-Themen 19
M Fragen zu Exceptions Java Basics - Anfänger-Themen 3
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
D Exceptions werfen + beenden Java Basics - Anfänger-Themen 12
M Exceptions aus interface-Methoden Java Basics - Anfänger-Themen 2
S File.renameTo und Exceptions / Fehlermeldung Java Basics - Anfänger-Themen 2
B Exceptions in Liste sammeln? Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
O "restliche" Exceptions fangen Java Basics - Anfänger-Themen 8
H [Stil] Exceptions in der Klasse behandeln oder throwen? Java Basics - Anfänger-Themen 62
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
V Aktivitätsdiagramm / Exceptions Java Basics - Anfänger-Themen 5
V Exceptions Java Basics - Anfänger-Themen 6
K Frage zu Exceptions -> Logging Java Basics - Anfänger-Themen 6
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
R JDom Exceptions Java Basics - Anfänger-Themen 4
R Datei einlesen mit Exceptions Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
G Exceptions - spiegeln wir da nicht einen Spiegel im Spiegel? Java Basics - Anfänger-Themen 10
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
U Frage zu Exceptions Java Basics - Anfänger-Themen 5
mwildam Philosophiefrage zu Exceptions und Rückgabewerten Java Basics - Anfänger-Themen 6
D Static, final Objekte mit Exceptions im Konstruktor Java Basics - Anfänger-Themen 2
G Exceptions Java Basics - Anfänger-Themen 4
G ServerSocket: Exceptions und Timeout Probleme Java Basics - Anfänger-Themen 10
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben