25 Stimmen

Reflection in Java verwenden, um eine neue Instanz zu erstellen, wobei der Typ der Referenzvariablen auf den Namen der neuen Instanzklasse gesetzt wird?

Alle Beispiele, die ich mir für Reflection ansehe, zeigen das Erstellen einer neuen Instanz einer unbekannten Implementierung und das Casting dieser Implementierung auf ihre Schnittstelle. Das Problem dabei ist, dass Sie jetzt keine neuen Methoden (nur Überschreibungen) der implementierenden Klasse aufrufen können, da Ihre Objektreferenzvariable den Schnittstellentyp hat. Hier ist, was ich habe:

Class c = null;
try {
    c = Class.forName("com.path.to.ImplementationType");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
InterfaceType interfaceType = null;
try {
    interfaceType = (InterfaceType)c.newInstance();
} catch (InstantiationException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
}

Wenn ich nur einen Verweis auf "com.path.to.ImplementationType" habe und ich nicht weiß, was dieser Typ sein könnte (er kommt aus einer Konfigurationsdatei), wie kann ich dann den Klassennamen verwenden, um ihn in ImplementationType zu übertragen? Ist dies überhaupt möglich?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X