【问题标题】:javassist compilation error no such classjavassist编译错误没有这样的类
【发布时间】:2013-07-26 06:33:05
【问题描述】:

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

【问题讨论】:

    标签: compilation compiler-errors bigdecimal javassist


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      new BigDecimal() 更改为new java.math.BigDecimal() 可以解决问题!

      【讨论】:

      • 当然,然后您可以删除所有导入语句。就像在常规 Java 代码中一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2011-12-28
      相关资源
      最近更新 更多