javassist编译错误没有这样的类

时间:2013-07-26 06:33:06

标签: compilation compiler-errors bigdecimal javassist

我正在使用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不行。这个问题有什么线索吗?谢谢!

2 个答案:

答案 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()解决了这个问题!