gpt4 book ai didi

java - JAXB 2 的 ObjectFactory 类有什么意义?

转载 作者:IT老高 更新时间:2023-10-28 11:30:15 27 4
gpt4 key购买 nike

我是使用 JAXB 的新手,我使用 JAXB 2.1.3 的 xjc 从我的 XML Schema 生成一组类。除了为架构中的每个元素生成一个类之外,它还创建了一个 ObjectFactory 类。

似乎没有什么能阻止我直接实例化元素,例如

MyElement element = new MyElement();

而教程似乎更喜欢

MyElement element = new ObjectFactory().createMyElement();

如果我查看 ObjectFactory.java,我会看到:

public MyElement createMyElement() {
return new MyElement();
}

那么有什么关系呢?为什么我还要费心保留 ObjectFactory 类?我假设如果我要从更改的架构重新编译它也会被覆盖。

最佳答案

向后兼容性并不是唯一的原因。 :-P

对于更复杂的模式,例如对元素内容可以采用的值具有复杂约束的模式,有时您需要创建实际的 JAXBElement对象。它们通常不是简单的手工创建,所以 create*方法为您完成了艰苦的工作。示例(来自 XHTML 1.1 模式):

@XmlElementDecl(namespace = "http://www.w3.org/1999/xhtml", name = "style", scope = XhtmlHeadType.class)
public JAXBElement<XhtmlStyleType> createXhtmlHeadTypeStyle(XhtmlStyleType value) {
return new JAXBElement<XhtmlStyleType>(_XhtmlHeadTypeStyle_QNAME, XhtmlStyleType.class, XhtmlHeadType.class, value);
}

这就是您获得 <style> 的方式标记为 <head>标签:

ObjectFactory factory = new ObjectFactory();
XhtmlHtmlType html = factory.createXhtmlHtmlType();
XhtmlHeadType head = factory.createXhtmlHeadType();
html.setHead(head);
XhtmlStyleType style = factory.createXhtmlStyleType();
head.getContent().add(factory.createXhtmlHeadTypeStyle(style));

ObjectFactory 的前三种用法可能被认为是多余的(尽管对一致性很有用),但第四个使 JAXB 更容易使用。成像不得不写new JAXBElement每次都手动出!

关于java - JAXB 2 的 ObjectFactory 类有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com