Hallo zusammen!
Folgende Codestücke vorneweg:
Sodele. Nun hab ich den Fall, dass eine Methode beide Exceptions werfen kann. Ich will aber so abstrakt und generisch wie möglich programmieren und hier stoße ich an Grenzen.
Mit catch kann ich ja anstelle von ExceptionA und ExceptionB einfach die Basisklasse ExceptionBasis abfangen. Aber um an den Parameter zu kommen, muss ich die BasisException trotzdem casten, nur um dann die gleichlautenden getCode() und getParameter() Methoden aufzurufen, die ich aber pro Enum-Typ einzeln ausprogrammieren muss.
Da Enums von sich aus weder erben können, noch polymorph verwendet werden können, wie kann ich obigen Code einfacher gestalten?
Gruß Joachim
Folgende Codestücke vorneweg:
Java:
// Meine Basis Exception
class ExceptionBasis extends Exception {
// Inhalt hier nicht wichtig
}
Java:
// Enum mit speziellen Codes für Exception A, die einen String als Parameter enthalten
enum ACodes {
A1("Bla"), A2("Blubb");
public String getParameter() {
return parameter;
}
}
class ExceptionA extends ExceptionBasis {
private ACodes aCodes;
public ACodes getCode() {
return aCodes;
}
}
Java:
// Enum mit speziellen Codes für Exception B, die einen String als Parameter enthalten
enum BCodes {
B1("Foo"), B2("Bar");
public String getParameter() {
return parameter;
}
}
class ExceptionB extends ExceptionBasis {
private BCodes bCodes;
public BCodes getCode() {
return bCodes;
}
}
Sodele. Nun hab ich den Fall, dass eine Methode beide Exceptions werfen kann. Ich will aber so abstrakt und generisch wie möglich programmieren und hier stoße ich an Grenzen.
Java:
try {
// Methode die entweder ExceptionA oder ExceptionB werfen kann
doSomething();
} catch(ExceptionBasis e) {
String parameter;
if (e instanceof ExceptionA) {
parameter = (ExceptionA e).getCode().getParameter();
} elseif (e instanceof ExceptionB) {
parameter = (ExceptionB e).getCode().getParameter();
}
// Hier steht dann entweder "Bla", "Blubb", "Foo" oder "Bar"
System.out.println(parameter);
}
Mit catch kann ich ja anstelle von ExceptionA und ExceptionB einfach die Basisklasse ExceptionBasis abfangen. Aber um an den Parameter zu kommen, muss ich die BasisException trotzdem casten, nur um dann die gleichlautenden getCode() und getParameter() Methoden aufzurufen, die ich aber pro Enum-Typ einzeln ausprogrammieren muss.
Da Enums von sich aus weder erben können, noch polymorph verwendet werden können, wie kann ich obigen Code einfacher gestalten?
Gruß Joachim