我确信这对大多数 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
这就是“问题”。我想在编辑器中“简单地”使用我的课程(我真的不知道正确的词)。我不想加载每个单独的方法——这不是类加载器的用途吗?