Instanzieren einer Klasse über den Klassennamen

  • lassen sich Klassen auch über den Klassennamen instanzieren. Also in dieser Form:

    Code
    MyClass myClass = createNewInstance("MyClass");

    (ist natürlich ein sinnloses Beispiel. Soll auch nur verdeutlichen, was ich meine)

    "Von der Gewalt, die alle Wesen bindet, befreit der Mensch sich, der sich überwindet." > Learn more ...

  • Das macht in der Form keinen Sinn, da du sowieso eine MyClass hast und genau weißt was da kommt.
    Meinst du vielleicht, dass der String der Name einer Subklasse von MyClass ist und du quasi "dynamisch" den richtigen (default-) Konstruktor aufrufst?

  • Das kannst du mit der Java Reflection API machen. (Refelection-API)

    ok, das is schon einmal ein ganz guter Ratschlag. thx!

    Ich hab aber jetzt nicht die Zeit, mich genauer mit der API auseinanderzusetzen.

    Wenn jemand ein entsprechendes Code-Snippet posten könnte wäre mir damit geholfen, ansonsten bleibe ich bei dem bisherigen Workarround mit entsprechenden Fall-Unterscheidungen.

    "Von der Gewalt, die alle Wesen bindet, befreit der Mensch sich, der sich überwindet." > Learn more ...

  • Du brauchst Class.forName() und Class.newInstance(). Sich damit auseinanderzusetzen sollte drin sein. :)

  • lassen sich Klassen auch über den Klassennamen instanzieren. Also in dieser Form:

    Code
    MyClass myClass = createNewInstance("MyClass");


    Der Aufruf wirkt mir etwas widersprüchlich - createNewInstance müsste den Typ MyClass schon kennen, um überhaupt eine Instanz davon als Ergebnis zurück geben zu können. Was man eher machen würde, wäre eine Implementierung eines Interfaces zu instantiieren, z. B. Plugin plugin = createPlugin("PluginImpl").

    Was genau möchtest du machen? Geht es dir bei der Frage nur um die prinzipielle Machbarkeit, oder hast du ein konkretes Problem, das du so lösen möchtest?

    2 Mal editiert, zuletzt von JohnFoo (4. Juni 2011 um 12:00)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!