【初心者】Java質問・相談スレッド92【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0116デフォルトの名無しさん
2006/10/04(水) 19:24:55質問です。
---------------------------------------------------
PackageBBB::InterfaceB ← <<use>> PackageAAA:ClassA
↑<<implements>>
PackageCCC::ClassC <<use>>→ PackageDDD::ClassD
---------------------------------------------------
PackageBBB::InterfaceBとPackageAAA:ClassAは静的にロードされている。
以上のような構成の時に
public PackageBBB::InterfaceB loadExtension(){
URL[] jarFiles = new URL[]{"PackageBBB.jar" ,"PackageCCC.jar", "PackageDDD"}; // ※1 なぜPackageBBB.jarを指定する必要がある?
URLClassLoader loader = new URLClassLoader(jarFiles, ClassLoader.getSystemClassLoader());
Object instance = loader.loadClass("PackageCCC::ClassC").newInstance(); //※2
PackageBBB::InterfaceB ibImpl = (PackageBBB::InterfaceB) instance; // ※3 CastExceptionが発生するんですが・・・。
return ibImpl;
}
んで、※2で、PackageCCC::ClassCのインスタンスを作成すると、※3でキャストすることができません・・・。
キャストできるような方法を教えてください。
多分、new URLClassLoader(jarFiles, ClassLoader.getSystemClassLoader()); あたりが怪しいとおもうのですが・・・。
あと、※1で、PackageBBB.jarを指定しないと※3で、PackageBBB::InterfaceBがネーヨと怒られちゃいます。
その理由も教えていただけたら幸いです・・・。
長くなりましたがお願い致します。m(_ _)m
■ このスレッドは過去ログ倉庫に格納されています