是否可以定义一个Java ClassLoader,它返回与请求的完全不同的类?

时间:2008-09-24 04:07:36

标签: java reflection classloader

我试过这个,但在调用时遇到ClassNotFoundException:

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

2 个答案:

答案 0 :(得分:5)

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

  

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

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

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

答案 1 :(得分:1)

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