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