如何使JAXB生成的类参与访问者模式?

如何使JAXB生成的类参与访问者模式?,jaxb,visitor,generated-code,customising,Jaxb,Visitor,Generated Code,Customising,嘿,伙计们,希望这是一个简单的好主意 我使用JAXB从模式生成类,我希望能够使用访问者模式处理它们 为此,我想我需要每个JAXB生成的类来实现我定义的接口,并向它们添加一个非常简单的方法,因此一个简单的示例是: 默认类: public class MyClass { private String name; public void get/setName() {...} } 所需类别: public class MyClass implements MyVisitorNode {

嘿,伙计们,希望这是一个简单的好主意

我使用JAXB从模式生成类,我希望能够使用访问者模式处理它们

为此,我想我需要每个JAXB生成的类来实现我定义的接口,并向它们添加一个非常简单的方法,因此一个简单的示例是:

默认类:

public class MyClass {
   private String name;

   public void get/setName() {...}
}
所需类别:

public class MyClass implements MyVisitorNode {
  private String name;

  public void get/setName() {...}

  public void accept(MyVisitorVisitor visitor) {
    visitor.visit(this);
  }
}
这可能吗?如果可能,有哪些选择?(以某种方式更改模式、运行时字节码操作、操纵JAXBContext…)

理想情况下,不依赖于特定于供应商的扩展


谢谢

JAX-B生成的类是标准Java类,您可以按照自己的意愿定制这些类,例如扩展接口、添加其他方法等等。类和属性上的注释是编组和解编组过程的驱动因素


尽管如此,如果定制JAXB生成的类,需要考虑一些事情。如每个类顶部所述,“对该文件的任何修改将在重新编译源架构时丢失。”。简而言之,如果自定义该类,则需要手动进行代码更改以支持任何模式更新。如果您重新生成了类,您的自定义代码将被删除,您将不得不从头开始。

用于JAXB的xjc编译器有一个插件接口,允许开发人员创建修改生成代码的插件。我个人最喜欢的是fluentapi,但还有其他一些可以添加到字符串、equals、hashCode等

我使用这项技术创建了一个插件来实现访问者模式,并将其作为google代码项目提供。它可能不完全是您想要的,但是如果您需要修改它以满足您的需要,它可能是一个开始检查代码和测试的好地方