向后兼容性不是唯一原因。:-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
每次都要手工写出!