ClassNotFoundException

ClassNotFoundException

我有一个具有自己的类加载器的项目。
但是加载某些类时遇到一个奇怪的问题。

基本上,它就像:

@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));

}

10-08 13:06