Hi
Ich bezweifle zwar das jemand eine Antwort auf die Frage weiß, aber dennoch wärs wirklich Nett wenn jemand eine "Idee" hätte ;o)
Gegeben sei:
MyClassLoader extends ClassLoader {}
In Ihm überschreibe ich
#loadClass(String name, boolean resolve)
Um die Reihenfolge des Ladens zu beeinflußen. Grob gesagt will ich damit erwirken das zuerst die Klasse dieses ClassLoaders geladen wird obwohl vielleicht die selbe Klasse im Parent existiert. (Eigentlich eine belanglose Änderung, da ich den selben Effekt erreichen kann, indem ich dem Parent die entsprechende .class wegnehme)
Sowie:
protected Class<?> findClass(String name) throws ClassNotFoundException
In Ihr lade ich einfach meine Klasse per FileInputStream. Das daraus resultierende ByteArray wird per defineClass in die Class gewandelt und so zurückgegeben.
Nun tritt leider bei der Benutzung folgender mir unerklärlicher Effekt auf:
Object o = cl.loadClass(className).newInstance();
System.out.println("\t object: " + o);
=> Die #toString() des eigenen nachgeladenen ByteCodes wird zuverläßig ausgeführt.
Nun erweitere ich das Beispiel um folgende Zeile:
MyClass m = (MyClass) o;
Und erhalte somit eine
"ClassCastException: full.qualified.MyClass"
Mit Debuggen / Google komme ich leider auf keinen Grünen Zweig. Wie soll ich etwas Debuggen wovon ich nur weiß das beim Cast die Exception geworfen wird? Das "Warum wird sie geworfen?" würde mich ja interessieren.
Wenn ich das getName() auf o anwende erhalte ich den korrekten full qualified Classname. Dieser ist ident mit dem der eigentlichen MyClass.
Ich weiß lediglich das wohl auch andere dieses Problem kennen:
https://lists.xcf.berkeley.edu/lists/advanced-java/2002-May/018843.html
Leider existieren auf derartige Fragen keine Antworten.
Achja eventuell als Addon das Verhalten des eigenen Classloaders:
cl.loadClass(className) führt zu:
MyClass im cl laden
Object im cl laden => kann er nicht finden
Object im Parent des cl laden. Dieser entspricht dem SystemClassloader.
thx für Ideen / Hinweise
cybi
Ich bezweifle zwar das jemand eine Antwort auf die Frage weiß, aber dennoch wärs wirklich Nett wenn jemand eine "Idee" hätte ;o)
Gegeben sei:
MyClassLoader extends ClassLoader {}
In Ihm überschreibe ich
#loadClass(String name, boolean resolve)
Um die Reihenfolge des Ladens zu beeinflußen. Grob gesagt will ich damit erwirken das zuerst die Klasse dieses ClassLoaders geladen wird obwohl vielleicht die selbe Klasse im Parent existiert. (Eigentlich eine belanglose Änderung, da ich den selben Effekt erreichen kann, indem ich dem Parent die entsprechende .class wegnehme)
Sowie:
protected Class<?> findClass(String name) throws ClassNotFoundException
In Ihr lade ich einfach meine Klasse per FileInputStream. Das daraus resultierende ByteArray wird per defineClass in die Class gewandelt und so zurückgegeben.
Nun tritt leider bei der Benutzung folgender mir unerklärlicher Effekt auf:
Object o = cl.loadClass(className).newInstance();
System.out.println("\t object: " + o);
=> Die #toString() des eigenen nachgeladenen ByteCodes wird zuverläßig ausgeführt.
Nun erweitere ich das Beispiel um folgende Zeile:
MyClass m = (MyClass) o;
Und erhalte somit eine
"ClassCastException: full.qualified.MyClass"
Mit Debuggen / Google komme ich leider auf keinen Grünen Zweig. Wie soll ich etwas Debuggen wovon ich nur weiß das beim Cast die Exception geworfen wird? Das "Warum wird sie geworfen?" würde mich ja interessieren.
Wenn ich das getName() auf o anwende erhalte ich den korrekten full qualified Classname. Dieser ist ident mit dem der eigentlichen MyClass.
Ich weiß lediglich das wohl auch andere dieses Problem kennen:
https://lists.xcf.berkeley.edu/lists/advanced-java/2002-May/018843.html
Leider existieren auf derartige Fragen keine Antworten.
Achja eventuell als Addon das Verhalten des eigenen Classloaders:
cl.loadClass(className) führt zu:
MyClass im cl laden
Object im cl laden => kann er nicht finden
Object im Parent des cl laden. Dieser entspricht dem SystemClassloader.
thx für Ideen / Hinweise
cybi