Compilation javassist编译错误没有这样的类

Compilation javassist编译错误没有这样的类,compilation,compiler-errors,bigdecimal,javassist,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("jav

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

通过将确切的类路径添加为
new java.math.BigDecimal()
来改变
new BigDecimal()
解决了这个问题

通过将确切的类路径添加为
new java.math.BigDecimal()
来改变
new BigDecimal()
解决了这个问题

顾名思义,
ClassPool.importPackage()
()用于导入包,而不是类。考虑到这一点,您应该使用:

ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(classDir); //classDir is my program Directory
pool.importPackage("java.util");
pool.importPackage("java.math");

注意:从Javassist3.14开始,它还支持导入完全限定的类名。因此,对于该版本,您的原始代码也应该可以工作。

顾名思义,
ClassPool.importPackage()
()用于导入包,而不是类。考虑到这一点,您应该使用:

ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(classDir); //classDir is my program Directory
pool.importPackage("java.util");
pool.importPackage("java.math");

注意:从Javassist3.14开始,它还支持导入完全限定的类名。因此,对于该版本,您的原始代码也应该可以工作。

当然,然后您可以删除所有导入语句。当然,您可以删除所有的导入语句。就像在普通Java代码中一样。