Was ist der richtige Weg, um reflektion verwenden, um Objekte zu instanziieren von unbekannten Klassen zur Laufzeit?

Arbeite ich an einer Konfiguration Loader-Klasse, so dass ich ändern kann, die Parameter an mein Programm über eine externe text-Datei (config.txt), anstatt Sie zu kompilieren, meinen code bei jeder änderung die ich mache.

Es wurde vorgeschlagen, dass ich die Java Reflection um dies zu tun, aber ich bin ein wenig verwirrt, wie könnte ich tatsächlich umzusetzen.

Konnte ich erfolgreich extrahieren den Namen der Klasse und die Argumente für den Konstruktor aus meiner text-Datei, aber wie mache ich daraus ein Objekt instanziiert?

hier ist, was ich von meiner Methode so weit:

public void loadObject(String classString, HashMap hm)
  {
  String className = props.getProperty(classString);
  Class c = Class.forName(className);
  }

classString ist ein string mit dem Namen der Klasse, und hm ist eine hashmap, wo die Klasse' Konstruktor-Parameter anzeigen, um Ihre beabsichtigte Werte.

I. e., für class Foo (int xPos, float yPos), "xPos" würde die Karte in einen string der beabsichtigten int " und "yPos" Karten " zu einem string der beabsichtigten schweben. Ich wollen zurückkehren zu können, new Foo(hm.get"xPos".toInt, hm.get"yPost".toFloat), aber ich bin mir nicht sicher, wie Sie dynamisch verwenden Sie einen Konstruktor wie (die Frage ist, gibt es mehrere mögliche Klassen-vielleicht ist es ein bar statt einer foo zum Beispiel).

Ich weiß, dass Ihr möglich, eine if/else-basierend auf der classString, und rufen Sie einfach die richtige Konstruktor nach der Identifizierung es so, aber ich bin auf der Suche, um eine erweiterbare code muss nicht umgeschrieben werden jedes mal, wenn ich eine neue Klasse hinzuzufügen, um das Programm.

Alle möglichen Objekte Erben von einem einzelnen übergeordneten Objekt.

Schreibe einen Kommentar