Class.forName() für Klasse mit privatem Konstruktor

pinsleepe

Mitglied
Hallo,
ich möchte in meinem Projekt eine Klasse A über ihren Namen aufrufen mit Class.forName("de.test.A"). Das Problem ist, dass der Konstruktor der Klasse privat ist und der Zugriff normalerweise über getInstance erfolgt. Gibt es eine Möglichkeit, sowas zu realisieren?

Wahrscheinlich wird mein Beschreibungsversuch unverständlich, aber was ich genau meine ist:
Es gibt immer (mindestens) zwei A-Klassen, jeweils in verschiedenen Verzeichnissen, also z.b.
de.test.A
de.test2.A
Und es gibt auch Klassen B, C usw. ..
Jetzt ist es so gelöst, dass die gleichnamigen Klassen A ein Interface IA implementieren und am Anfang der Ausführung direkt gesetzt werden, in etwa
Code:
IA a = 
if(..) { de.test.A.getInstance()}
else{ de.test2.A.getInstance()}
Geht das schöner?

Im voraus vielen Dank für Eure Antworten :rolleyes:
 
Also ich kann dir verraten wie du die Klasse instanziieren kannst, allerdings ist die Frage ob es nicht auch anders geht. Allerdings weiß ich anhand von A,B und C nicht so ganz was du überhaupt versuchst.

Java:
final Constructor<A> constructor = A.class.getConstructor();
constructor.setAccessible(true);
final A newInstance = constructor.newInstance();
 
Hallo zeja,

die Klassen A,B,... sind jeweils Implementierungen einzelner Menüpunkte eines Programms. Das Programm kann entweder als Standard Swing-Applikation oder aber als Charva-Applikation gestartet werden.

Charva ist eine Bibliothek, die gleichnamige Klassen wie Swing zur Verfügung stellt und ein (abgemagertes) "Swing für Console" ermöglicht.

Deswegen haben wir jetzt im Projekt für jede Funktionalität 2 Klassen mit quasi-doppeltem Code, der sich nur bei den Imports unterscheidet ( z.B. charvax.swing.JFrame VS javax.swing.JFrame).

So gibt es z.B. 2 Klassen zur Darstellung des Hauptfensters:
de.charva.ui.MainFrame und de.java.ui.MainFrame

Ich dachte, man könnte das Ganze besser gestalten, wenn man beim Programmstart schon weißt, ob "java" oder "charva" im Pfad für alle Menüklassen steht und dann nur die einzelnen Klassen aufrufen würde.

-------------------------------------------------------------------------------------
Deine Lösung verstehe ich in diesem Zusammenhang nicht ganz: ich wollte gerade, dass man die Klasse A nicht explizit angeben muss (auch nicht bei der Typisierung des Konstruktors). Oder gehört der Code etwa in die A-Klasse selbst?:suspekt:

Gruß
 
Ich dachte du wolltest wissen, wie du eine Klasse mit einem privaten Konstruktor instanziieren kannst.
 

Neue Beiträge

Zurück