如何使用Javassist从其源代码加载类?

时间:2011-11-02 18:16:41

标签: java javassist javaloader

我在输入流中有一个类的完整源代码。是否可以使用Javassist为此类创建新的CtClass对象?

我知道使用类的名称可以创建一个新的CtClass对象,例如:

ClassPool.getDefault().makeClass("name_of_the_new_class");

但在我的情况下,我事先并不知道该类的名称,只是它的完整源代码(当然我可以获得解析源代码的类的名称,但请不要告诉我这是解决方案的一部分:-))

1 个答案:

答案 0 :(得分:2)

如果您想即时编译源文件,请查看工具API以及ToolProvider.getSystemJavaCompiler()。从那里你可以从源代码编译.class文件,并在需要时使用类加载器加载它们。

然后,您还可以使用Javassist从创建的类文件的字节创建一个CtClass,使用ByteArrayClassPath和一个新的ClassPool。