【发布时间】:2016-09-22 09:06:17
【问题描述】:
我有一个程序,我在运行时生成类(仅包括变量和相关的 getter 和 setter 方法)。稍后我想补课。
要获取该类 - 我知道它的名称,但它不在类路径中 - 我尝试了 .forName() 但我总是得到一个 ClassNotFoundException。
这是我的例子:
Exception in thread "main" java.lang.ClassNotFoundException: com.test.wam.business.wsobjects.Testclass
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at gui.Application.main(Application.java:94)
还有代码:
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
DynamicURLClassLoader dynamicURLClassLoader = new DynamicURLClassLoader(urlClassLoader);
dynamicURLClassLoader.addURL(new URL("file://C:\\dev\\Eclipse_was\\guitest\\generated"));
Class c = Class.forName("com.test.wam.business.wsobjects.Testclass");
Object classInstance = c.newInstance();
类加载器:
public class DynamicURLClassLoader extends URLClassLoader {
public DynamicURLClassLoader(URLClassLoader classLoader) {
super(classLoader.getURLs());
}
@Override
public void addURL(URL url) {
super.addURL(url);
}
}
文件的全限定名(用 eclipse 创建 -> 复制全限定名)
/guitest/generated/com/test/wam/business/wsobjects/Testclass.java
这里有什么问题?
【问题讨论】:
-
“但它不在类路径中”。那个。
-
Class.forName需要class文件,Testclass.java不需要。 -
在这种情况下我该怎么办 - 我只有生成的 java 文件,没有类文件?
-
仅仅创建
DynamicURLClassLoader什么都不做,Class.forName(...)不会以某种方式自动使用该类加载器。当然,必须先编译 Java 源代码。 -
我在问题中添加了 DynamicURLClassLoader 的代码
标签: java reflection classloader urlclassloader