我在输入流中有一个类的完整源代码。是否可以使用Javassist为此类创建新的CtClass
对象?
我知道使用类的名称可以创建一个新的CtClass
对象,例如:
ClassPool.getDefault().makeClass("name_of_the_new_class");
但在我的情况下,我事先并不知道该类的名称,只是它的完整源代码(当然我可以获得解析源代码的类的名称,但请不要告诉我这是解决方案的一部分:-))
答案 0 :(得分:2)
如果您想即时编译源文件,请查看工具API以及ToolProvider.getSystemJavaCompiler()。从那里你可以从源代码编译.class文件,并在需要时使用类加载器加载它们。
然后,您还可以使用Javassist从创建的类文件的字节创建一个CtClass,使用ByteArrayClassPath和一个新的ClassPool。