我有一个具有自己的类加载器的项目。
但是加载某些类时遇到一个奇怪的问题。
基本上,它就像:
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{
// do some magic
return myBrandNewClas;
}
但是发生的是,即使返回一个类,Class.forName(...)仍然会抛出ClassNotFoundException(可以在here中找到示例)。
另一个信息:返回的类的名称与请求的类名称不同。
我开始怀疑它是否是JVM的安全锁(已在Oracle JVM中测试)。
谢谢!
最佳答案
forName的代码是本地代码,因此很难看到,但是是的,我想说一下该名称已被检查,因为传递正确的名称是可行的:
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));
}