String zu Objekt
lima-city → Forum → Programmiersprachen → Java
anwendung
begrenzt sinn
code
dynamisches laden
einzige grund
folgende meldung
frage
haus
helfen
klasse
laufzeit
machen
objekt
probier
sagen
standard
string
system
url
weben
-
Hallo,
ich wollte Fragen wie ich ein String welcher einen Klassennamen repräsentiert (zb. "meinPaket.meineKlasse") in ein Objekt dieser Klasse umwandeln kann?
Das hier wollte leider nicht so, und google hat mir sonst leider auch nichts brauchbares geliefert. Ich hoffe ihr könnt mir helfen.
mfg Andre -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ein String ist ein String. Wenn du das in einen anderen Datentyp casten willst, dann ergibt das für mich nur begrenzt Sinn. Was hast du eigentlich vor?
Beitrag zuletzt geändert: 14.5.2011 9:40:53 von bladehunter -
@bladehunter
Nein, er bezieht sich auf den Classloader/Reflection.
@andre:
ClassLoader bla = new ClassLoader(); // den classloader erstellen (nimm am besten urlclassloader) // classloader befüttern mit jars und classdateien oder streams Class blubb = bla.loadClass( "bli.bla.blubb" ); Object ob = blubb.newInstance();
Probier das mal aus, aber es ist schwer mit Reflection zu arbeiten und es sollte vermieden werden, weil es ein dauerndes Casten mit sich bringt.
Beitrag zuletzt geändert: 14.5.2011 10:02:40 von reimann -
Also wenn ich das ganze jetzt mit dem URLClassLoader mache bekomme ich folgende Meldung:
java.lang.ClassCastException: pages.Board cannot be cast to pages.Board
Der Code sieht bei mir wie folgt aus:
PrintWriter o = response.getWriter(); URL tmpURL = new File("C:/Users/Andre/Documents/NetBeansProjects/test/build/web/WEB-INF/classes/").toURL(); o.println(tmpURL); URLClassLoader loader = new URLClassLoader(new URL[] { tmpURL }); Board b = (Board) loader.loadClass("pages.Board").newInstance(); b.index(); o.close();
Das ganze wird über GlassFish 3.1 ausgeführt.
mfg Andre -
Ich denke das hängt vor allem damit zusammen, dass Board von dem ClassLoader des Systems (JVM oder Glassfish selber) geladen wird und jetzt denkt, die beiden Klassen wären unterschiedlich. Eigentlich müsste es aber so gehn.
Die Frage ist aber auch wieso du eine bekannte Klasse so laden möchtest. Vielleicht helfen dir auch ein paar Tutorials zu Hot Deployment weiter, da das der einzige Grund ist, der mir einfällt, warum man sowas macht. Glassfish unterstützt soweit ich weiß auch von Haus aus Hot Deployment.
Probiermal:
Board b = (Board) Class.forName("pages.Board").newInstance();
Dann lädt er aber immer von dem Standard/System ClassLoader und um eine veränderte Klasse einzuführen musst du den Server/die Anwendung neu starten, was für mich keinen Sinn ergibt. -
Super so gehts, danke.
Nun ich habe das ganze jetzt beispielhaft an dieser Klasse gemacht. Das ganze soll hinterher auf die Templates angewendet werden.
-
Du musst nur beachten, dass die Klassen schon zur Laufzeit vorhanden sein müssen. Dynamisches Laden ist damit nicht möglich.
Ansonsten kenne ich mich zu wenig mit JavaEE aus, um dazu irgenwas sagen zu können. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage