我有一个项目,它有自己的类加载器。 但是我在加载一些类时遇到了一个奇怪的问题。
基本上,它就像:
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{
// do some magic
return myBrandNewClas;
}
但是发生的情况是,即使返回一个类,Class.forName(...)仍然抛出ClassNotFoundException(示例可以在here中找到) .
另一个信息:返回的类名与请求的类名不同。
我开始怀疑这是否是JVM的安全锁(在Oracle JVM中测试)。
谢谢!
最佳答案
forName 的代码是 native 的,因此很难看到,但是是的,我会说名称已被检查,因为传递正确的名称是有效的:
public class BBB
{
public static class a {
}
private static class MyCL extends ClassLoader
{
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{
System.out.println("Hi, " + a.class.getName());
return a.class;
}
}
public static void main(String[] args) throws ClassNotFoundException
{
MyCL cl = new MyCL();
System.out.println(Class.forName("com.asg.util.BBB$a", true, cl));
}
关于Java 动态类加载器抛出 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688772/