これはほとんどのJavaプログラマーにとって明らかなように思えます。答えはわかっていると「思います」が、私の問題は、カスタムクラスローダーを使用する必要があることです。カスタムクラスローダーを使用したいのですが、含まれているクラスと同じように、コード内のクラスを引き続き使用できます。
例:
// returns my class loader -- set earlier on the thread.
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class loadedVersion = Class.forName("org.example.MyClass"); // works
// loadedVersion's class loader is also equal to cl
// generates "java.lang.NoClassDefFoundError" at runtime on the following line
org.example.MyClass m = new org.example.MyClass();
カスタムクラスローダーを使用してクラスをロードし、エディターでクラスを「プレーンに」使用できるようにするには、どうすればよいでしょうか。
編集:改訂されたタイトルは誤解を招く可能性があります-クラスは問題なくロードされます。私の元の投稿に示されているように。私の理解では、問題は、現在、通常の宣言ステートメントでクラスを使用できないことです(java。*クラスを使用するのと同じようにエディターで)。
更新、これが私がやろうとしていることをよりよく説明することを願っています。
// set the thread's class loader
ClassLoader cloader = new MyClassLoader(); // internal mess to load bytecode omitted
Thread.currentThread().setContextClassLoader(cloader);
// This works:
Method m = cloader.loadClass("my.SuperClass").getMethod("doStaticMagic", new Class<?>[] {});
m.invoke(null, null);
// This does not work:
my.SuperClass.doStaticMagic(); // NoClassDefFoundError
これが「問題」です。エディターでクラスを「わかりやすく」(正しい単語が本当にわかりません)使用したいと思います。個々のメソッドをロードする必要はありません-それはクラスローダーの目的ではありませんか?