1

我正在编写一个使用 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

List 工作正常,但是 BigDecimal 或 ArrayList 不是。这个问题有什么线索吗?谢谢!

4

2 回答 2

4

顾名思义,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 开始,它也支持导入完全限定类名。因此,使用该版本,您的原始代码也应该可以工作。

于 2015-01-30T09:25:47.023 回答
2

new BigDecimal()通过添加确切的 classPath 来解决new java.math.BigDecimal()问题!

于 2013-07-26T07:05:54.017 回答