如何创建使用Javassist创建的类的变量



我在运行时使用Javassist创建了一个POJO类。我正在尝试使用我创建的POJO将XML文件转换为Java对象,使用Jackson Mapper,如下所示,

//test.proper.MyRuntimeClass is the Pojo I created using javassist.
CtClass ctClass = classPool.getCtClass("test.proper.MyRuntimeClass");
mapper.readValue(<InputStream>, Class.forName(ctClass.getName()));

我能够解析XML文件,但是,我无法将类型myruntimeclass的变量分配给上线。

我想要这样的东西。

test.proper.MyRuntimeClass myClass = mapper.readValue(<InputStream>, Class.forName(ctClass.getName()));

请让我知道实现这一目标的正确方法。预先感谢。

您不能在"常规" Java代码中使用类。您需要编译"常规" Java代码,以要编译一个编译器需要其使用的类的所有字体。

但是您可以解决:

  • 创建Javassist生成类实施的接口,并将该类型用于变量" myclass"
  • 生成使用Myruntimeclass与Javasisst的代码
  • 将对象用作" myclass"的类型和反射以访问其上的方法/属性。

我认为创建界面是最容易写/理解/维护方法

您需要首先将CTClass转换为类。然后将其传递给映射器,为班级。

Class MyRuntimeClass = ctClass.toClass();
mapper.readValue(<InputStream>, MyRuntimeClass);

更多细节在这里 - 为什么在用Javassist更改方法主体后,我必须致电.toclass()?

相关内容

  • 没有找到相关文章

最新更新