Moin,
um mein Problem zu verdeutlichen habe ich mal ein kleines Beispiel geschrieben.
Das erste offensichtliche Problem ist, das ich immer eine NoSuchMethodException für die Klasse B bekomme (Konstruktor haut nicht). Keine Ahnung woran das liegt oder wie ich das sonst schreiben soll.
Ein eher kosmetisches Problem ist, das ich immer eine Instanz des Managers benötige. Ist in meinen Augen aber gerade nicht der Sinn einer statischen Verwaltung von Class-Objekten.
Bin über jede Hilfe dankbar,
Mewel
um mein Problem zu verdeutlichen habe ich mal ein kleines Beispiel geschrieben.
Java:
/** Hauptklasse um eine Hashtable mit verschiedenen Term-Klassen zu verwalten. */
public class Manager {
private static Map<String, Class<? extends Term>> termList;
static {
termList = new Hashtable<String, Class<? extends Term>>();
try {
registerTerm(A.class);
} catch(Exception exc) {
exc.printStackTrace();
}
}
public static void registerTerm(Class<? extends Term> termClass) throws NoSuchMethodException, InvocationTargetException,
IllegalAccessException, InstantiationException {
// seltsam aber ok, auch wenn ich es lieber mit newInstance machen würde
Constructor<? extends Term> c = termClass.getConstructor(Manager.class);
// find ich nicht schön das ich hier ne neue instanz von Manager anlegen muss
termList.put(c.newInstance(new Manager()).getSomething(), termClass);
}
public abstract class Term {
public abstract String getSomething();
}
private class A extends Term {
// benötigt zwingend einen konstruktur, auch wenn ich ihn nicht will
public A() {
}
@Override
public String getSomething() {
return "B";
}
}
}
Java:
/** Ein weiterer Term der sich beim Manager registrieren soll. */
public class B extends Term {
public B() {
// auch sehr komisches konstrukt, was anscheinend auch nicht
// funktioniert
new Manager().super();
}
@Override
public String getSomething() {
return "B";
}
public static void main(String args[]) throws Exception {
Manager.registerTerm(B.class);
}
}
Das erste offensichtliche Problem ist, das ich immer eine NoSuchMethodException für die Klasse B bekomme (Konstruktor haut nicht). Keine Ahnung woran das liegt oder wie ich das sonst schreiben soll.
Ein eher kosmetisches Problem ist, das ich immer eine Instanz des Managers benötige. Ist in meinen Augen aber gerade nicht der Sinn einer statischen Verwaltung von Class-Objekten.
Bin über jede Hilfe dankbar,
Mewel