我试过这个,但在调用时遇到ClassNotFoundException:
Class.forName("com.AClass", false, mySpecialLoader)
答案 0 :(得分:5)
ClassLoader必须调用defineClass来获取Class。根据JavaDoc for defineClass:
如果name不为null,则它必须相等 到类的二进制名称 由字节数组指定。
如果名称为null,它将从字节码中获取。所以你可以返回任何你想要的类,只要它叫做com.AClass。换句话说,您可以拥有com.AClass的多个版本。你甚至可以使用类似JavaAssist的东西来动态创建一个类。
但这并没有解释ClassNotFoundException - 听起来你的类加载器没有返回任何东西。
答案 1 :(得分:1)
不可能返回与请求的名称不同的类。但是,可以使用ASM等字节码操作工具自动重命名要返回到所请求的类的类。