Hi,
ich hab mal wieder ein Problem und weiß nicht so recht weiter. Die Suche hab ich selbstverständlich schon verwendet.
Sachstand:
Ich habe eine Klasse / Methode, die zur Laufzeit voll dynamisch andere Klassen (je nach übergebenem String) aufrufen soll. Das ist an sich kein Problem, dafür gibts ja die Reflection-API. Normale Aufrufe kriege ich auch ohne Probleme hin. Auch wenn ich nicht den Standardkonstruktor will kann ich mir ja mit getConstructor den notwendigen Konstruktor holen. Um einen Konstruktor mit 2 Strings aufzurufen muss ich mir dann ja auch einfach zwei Klassenobjekte vom Typ String holen z. B.:
Was ist jetzt aber wenn ich nicht weiß was ich vorher übergeben bekomme. Ich hab also ne Klasse / Methode, die soll aufgerufen werden mit einem String für den Namen der Klasse, die sie per Reflection aufrufen soll und mit den Parametern, die der Konstruktor der aufzurufenden Klasse bekommen soll. Um das ganze dynamisch zu halten müsste ich die Klasse (oder auch Methode) so aufrufen .....(String sClassName, Object[] oaParams), weil ich weiß ja nicht was ich so bekomme (int, String, JFrame, oder sonst was). Um den Konstruktor jetzt per Reflection aufzurufen muss ich mir ja aber Class-Objekte von den oaParams anlegen (dass ich den richtigen Konstruktor kriege), aber wie weiß ich welchen Typ die Objekte in meinem Objekt[] haben? Bzw. ist sowas in dem Umfang überhaupt noch möglich?
Danke schon mal für eure Mühen.
ich hab mal wieder ein Problem und weiß nicht so recht weiter. Die Suche hab ich selbstverständlich schon verwendet.
Sachstand:
Ich habe eine Klasse / Methode, die zur Laufzeit voll dynamisch andere Klassen (je nach übergebenem String) aufrufen soll. Das ist an sich kein Problem, dafür gibts ja die Reflection-API. Normale Aufrufe kriege ich auch ohne Probleme hin. Auch wenn ich nicht den Standardkonstruktor will kann ich mir ja mit getConstructor den notwendigen Konstruktor holen. Um einen Konstruktor mit 2 Strings aufzurufen muss ich mir dann ja auch einfach zwei Klassenobjekte vom Typ String holen z. B.:
Code:
Class clazz = TestConstructors.class;
//Formale Parameter definieren
Class[] formparas = new Class[2];
formparas[0] = String.class;
formparas[1] = String.class;
try {
Constructor cons = clazz.getConstructor(formparas);
//Aktuelle Argumente definieren
Object[] actargs = new Object[] {"eins", "zwei"};
Object obj = cons.newInstance(actargs);
((TestConstructors)obj).print();
} catch (Exception e) {
System.err.println(e.toString());
System.exit(1);
}
Was ist jetzt aber wenn ich nicht weiß was ich vorher übergeben bekomme. Ich hab also ne Klasse / Methode, die soll aufgerufen werden mit einem String für den Namen der Klasse, die sie per Reflection aufrufen soll und mit den Parametern, die der Konstruktor der aufzurufenden Klasse bekommen soll. Um das ganze dynamisch zu halten müsste ich die Klasse (oder auch Methode) so aufrufen .....(String sClassName, Object[] oaParams), weil ich weiß ja nicht was ich so bekomme (int, String, JFrame, oder sonst was). Um den Konstruktor jetzt per Reflection aufzurufen muss ich mir ja aber Class-Objekte von den oaParams anlegen (dass ich den richtigen Konstruktor kriege), aber wie weiß ich welchen Typ die Objekte in meinem Objekt[] haben? Bzw. ist sowas in dem Umfang überhaupt noch möglich?
Danke schon mal für eure Mühen.