繁体   English   中英

JAXB需要一个公共的无参数构造函数?

[英]What JAXB needs a public no-arg constructor for?

在编组期间,JAXB需要一个公共的无参数构造函数?

 Marshaller msh = ctx.createMarshaller();
 msh.marshal(object, System.out);

我传递的是一个对象,而不是一个类。 为什么JAXB需要构造函数? 构建什么?

在编组操作期间,JAXB实现不需要no-arg构造函数。 JAXB确实需要一个用于解组。 通常,在创建JAXBContext时,缺少no-arg构造函数会导致错误。 您正在使用的JAXB实现可能会延迟初始化,直到执行实际操作。

通常,对于多arg构造函数的支持是我们在未来版本的JAXB中应该考虑的。 JAXB(MOXy)EclipseLink实现中,我们为此功能打开了一个增强请求(随意添加相关详细信息):

在当前版本的JAXB中,您可以使用XmlAdapter来支持此用例:

正如其他人所指出的那样,它确实不需要一个,但至少在Sun的实现中,它确实需要一个。 你可以使用虚拟构造函数解决这个问题:

private MyObject() {
    throw new UnsupportedOperationException("No-arg constructor is just to keep JAXB from complaining");
}

与许多框架一样 - 简单性和一致性。 它允许库简单地调用Class.newInstance(),而不必担心如何为获取它们的构造函数指定某些依赖项。 JAXB不希望自己关注全面的依赖注入,而不仅仅是基于属性的设置。

在某些方面这是一种耻辱,因为这意味着这些类不可能是不可变的,但这是需要权衡的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM