Kalsse mit forname suchen

jb007

Mitglied
Hallo,

ich möchte mit Class.forName("artikel") nach einer Klasse Artikel.class suchen und diese dann instanzieren.

Da dies dynamisch auch für weitere Klassen passieren soll fehlt mir natürlich der voll qualifizierte Name.

Wie muß ich daran gehen, um den ClassPath zu finden ?
Benötige ich einen eigenen ClassLoader oder wie funktioniert das ?
Gibt es dazu vielleicht schon ein Beipiel hier ?

Vielen Dank schon einmal für eure Antworten.

Gruß Jens
 
Hallo,

wenn du mit deinem laufenden Programm suchst, befindet es sich im Classpath.
Einen eigenen ClassLoader brauchst du eigentlich nicht.

Das einzige was mit jetzt einfällt ist, dass du durch die Verzeichnisse laufen musst und schauen ob dort eine Datei existiert, die so heißt.

Gibt es dazu vielleicht schon ein Beipiel hier ?

Dazu eignet sich die ForenSuche. :-)

MFG

zEriX
 
Danke erst einmal für deine Antwort.

Vielleicht habe ich jetzt etwas falsch verstanden oder mich auch falsch ausgedrückt.

Die Klassen befinden sich in meinem jar file das ich ja ausführe.
Wie kann ich denn dort nach meiner Klasse suchen ?

Habe es schon mit getClass().loadClass() und allem möglichen versucht.

Ich glaube ich verrenne mich wohl gerade.

Noch ein kleiner tip wäre toll :)

Gruß Jens
 
Darf ich mal fragen was du eigentlih machen möchtest? Vielleicht kann man das anders lösen.

MFG

zEriX
 
Hallo zEriX,

ich werde es mal erklären und vielleicht wird dann alles klarer.

Also:

Für den Datenaustausch zwischen Client and Server verwenden wir das Json Format.
Für das Mapping eines Json Strings auf Objekte verwenden wir die Json-Lib.

Das funktioniert auch alles recht gut.

Bekomme ich vom Server z.B. einen Artikel, dann mappe ich diesen auf eine Klasse vom Typ Artikel.
Wie gesagt das funktioniert auch alles und zwar deshalb, weil ich vorher schon festlege auf welche Klasse gempappt werden soll.

Ein Aufruf sieht in etwa folgendermaßen aus:

Code:
    public static Object getObject(HashMap map, Class targetClass, Map classMap)
    {
        return JSONObject.toBean(JSONObject.fromObject(map), targetClass, classMap);
    }

    Artikel artikel = (Artikel)getObject(artikelHashMap, Artikel.class, null);

Jetzt möchte ich ganz gerne, dass dieses Mapping automatisch geschieht und die entstehenden Objekte in eine Factory für mich bereitstehen.

Dafür habe ich folgendes gemacht:
Jeder key in der HashMap kann z.B. für eine Klasse stehen auf die ich mappen möchte.
Ich iteriere darüber, finde den key -> artikel und möchte nun einfach die zugehörige Klasse finden.

Wie im Code-Beispiel zu sehen ist, benötige ich für das Mapping ein Class Objekt.

Leider habe ich nur den Namen der Klasse aber keinen voll qualifizierten Namen wie z.B. de.tutorials.test.beispiel.Artikel um auf simple Art und Weise an ein Class Objekt zu kommen.

Mit Class.forName("Artikel") kann ich also nichts anfangen da mir einfach der Pfad zur Klasse fehlt.

Hilfreich wäre es auch festlegen zu können ab wo im Pfad gesucht werden soll,
also z.B. ab de.tutorials.test oder so.

Ich hoffe ich konnte es einigermaßen verständlich rüberbringen...

Gruß Jens
 
Warum machst du es nicht einfach so, dass du alle Klasse auf die gemappt werden kann in einem Package liegen. Oder du machst eine HashMap in der du das speicherst. Also Klassenname ist der Key und der vollqualifizierte Name das Object.

Oder

Ist es nicht möglich den vollqualifizierten Klassennamen anzugeben?

MFG

zEriX
 
Hallo zEriX,

hatte ich auch schon überlegt alle relevanten Klassen in ein bestimmtes Package zu legen.

Ich fand das jetzt nicht so schön, da wir für einzelne Module auch einzelne Packages haben und zugehörige Klassen auch dort stehen sollten (ist meine Meinung).

Wenn es aber nicht anders geht und niemand einen anderen Ansatz dafür anbieten kann, dann werde ich wohl ein bestimmtes Package für alle Klassen anlegen müssen oder halt eine HashMap zur Package Auflösung verwenden.

Gruß Jens
 
Wo bekommst du denn den String "artikel" her?
Ist es nicht möglich da den kompletten Namen zu bekommen?

MFG

zEriX
 
Hey,

der String artikel wird von unserem Team festgelegt das für die serverseitige Programmierung zuständig ist.

Natürlich kann man sich hier verständigen.....

Intern habe ich das ganze noch einmal mit dem Team besprochen das für die Java Applikation zuständig ist.
Wir sind jetzt der Meinung, das nichts dagegen spricht, wenn wir alle Klassen die wir für das Mapping benötigen in ein vorgegebenes Package legen.

Wir setzen uns zwar morgen nochmals alle zusammen aber es wird wohl dabei bleiben.
Da müssen jetzt halt genauere Standards definiert werden...

Ich danke sehr für deine Mühe.

Gruß Jens
 
Eine weitere Idee wäre ja noch, dass keine Strings übertragen werden, sondern Class-Objecte, damit hättest du dann gar kein Problem. Dann wäre es sogar egal, wo die Klassen liegen.

MFG

zEriX
 
Zurück