2

我试过这个,但调用时得到一个 ClassNotFoundException :

Class.forName("com.AClass", false, mySpecialLoader)
4

2 回答 2

5

ClassLoader 必须调用 defineClass 来获取 Class。根据defineClass的JavaDoc:

如果 name 不为 null,则它必须等于字节数组指定的类的二进制名称。

如果名称为空,它将从字节码中获取。所以你可以返回任何你想要的类,只要它叫做 com.AClass。换句话说,您可以拥有多个版本的 com.AClass。您甚至可以使用 JavaAssist 之类的东西动态创建一个类。

但这并不能解释 ClassNotFoundException - 听起来你的类加载器没有返回任何东西。

于 2008-09-24T06:22:58.200 回答
1

不可能返回一个名称与请求名称不同的类。但是,可以使用 ASM 之类的字节码操作工具自动将要返回的类重命名为请求的类。

于 2008-10-22T21:57:59.503 回答