我正在使用javassist编写一个程序来编译另一个Java类。生成的类使用一些对象,如BigDecimal, List, ArrayList
。所以我导入他们的包:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(classDir); //classDir is my program Directory
pool.importPackage("java.util.List");
pool.importPackage("java.math.BigDecimal");
pool.importPackage("java.util.ArrayList");
然后我使用CtField.make()
为每个对象制作一些对象。当我使用javassist进行编译时,它会抛出错误:
CannotCompileException: [source error] no such class: BigDecimal
列表工作正常,但是BigDecimal或ArrayList不行。这个问题有什么线索吗?谢谢!
答案 0 :(得分:3)
顾名思义,ClassPool.importPackage()
(JavaDoc)用于导入包,而不是类。考虑到这一点,您应该使用:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(classDir); //classDir is my program Directory
pool.importPackage("java.util");
pool.importPackage("java.math");
注意:从Javassist 3.14开始,它确实支持导入完全限定类名。因此,使用该版本,您的原始代码也应该有效。
答案 1 :(得分:0)
通过添加精确的classPath作为new BigDecimal()
来更改new java.math.BigDecimal()
解决了这个问题!