2011-11-02 38 views
0

我在輸入流中有一個類的完整源代碼。是否可以使用Javassist爲這個類創建一個新的CtClass對象?如何使用Javassist從其源代碼加載類?

我知道,與類的名稱,可以創建一個新的CtClass對象的東西,如:

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

但在我來說,我事先不知道類的名字,只是它的完整源代碼(當然,我可以得到解析源代碼的類的名稱,但請不要告訴我這是解決方案的一部分:-))

回答

2

如果您想編譯源文件看看工具API以及ToolProvider.getSystemJavaCompiler()。從那裏你可以從源代碼編譯.class文件並在需要時使用類加載器加載它們。

然後,您也可以使用Javassist通過使用ByteArrayClassPath創建的類文件的字節創建CtClass並使用新的ClassPool。