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

时间:2016-06-21 18:29:07

标签: java javassist fasterxml

我在运行时使用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()));

请让我知道实现这一目标的正确方法。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您无法在“常规”java代码中使用该类。你需要编译“常规”java代码,编译器需要编译它需要的所有类的字节码。

但你可以解决这个问题:

  • 创建javassist生成的类实现的接口,并将该类型用于变量“myClass”
  • 使用javasisst
  • 生成使用MyRuntimeClass的代码
  • 使用Object作为“myClass”的类型和反射来访问其上的方法/属性。

在我看来,创建界面是最容易编写/理解/维护的方法

答案 1 :(得分:0)

您需要先将CtClass转换为Class。然后将它作为Class传递给Mapper。

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

更多细节在这里 - Why do I have to call .toClass() after changing a method body with Javassist?