Java 使用空嵌套列表解组自关闭标记
我看不到如何正确地注释我的类,从而使自关闭标记导致类创建一个空列表。换句话说,XML中根本没有指定列表 对于我的问题,我将参考以下两个示例类:Java 使用空嵌套列表解组自关闭标记,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我看不到如何正确地注释我的类,从而使自关闭标记导致类创建一个空列表。换句话说,XML中根本没有指定列表 对于我的问题,我将参考以下两个示例类: @XmlRootElement(name="a") public class A { @XmlElement List<B> bs; } @XmlRootElement(name="b") public class B { @XmlValue String v; } @XmlRootElement(name
@XmlRootElement(name="a")
public class A {
@XmlElement
List<B> bs;
}
@XmlRootElement(name="b")
public class B {
@XmlValue
String v;
}
@XmlRootElement(name=“a”)
公共A类{
@XmlElement
名单b;
}
@XmlRootElement(name=“b”)
公共B级{
@XmlValue
字符串v;
}
此XML解组很好:
<a>
<b>One</b>
<b>Two</b>
<b>Three</b>
</a>
一个
两个
三
第二个XML示例也正确地与预期的空列表解组:
<a>
<b/>
</a>
但是,第三个示例导致XML根本没有解组
<a/>
我希望看到的第三个示例与第二个示例相同,在第二个示例中,类使用空列表初始化。这是否可能使用JAXB实现,或者我是否试图做一些违背定义行为的事情?标准方法(JAXB在从XML模式生成代码时也使用)是
@XmlRootElement(name=“a”)
公共A类{
私人名单;
@xmlement(name=“b”)
公共列表getBs(){
如果(bs==null){
bs=新的ArrayList();
}
返回bs;
}
}
没有二传手 一点也不拆封——从什么意义上说?您不会得到异常,是吗?不会抛出任何JAXBEException。当A是一个字段时,该字段被设置为null。这就像广告一样有效。只需确保显式初始化列表,否则在解组时会出现NullPointException。怎么会有NPE?如果有getter,JAXB不会访问私有字段。
@XmlRootElement(name="a")
public class A {
private List<B> bs;
@XmlElement(name="b")
public List<B> getBs(){
if( bs == null ){
bs = new ArrayList<>();
}
return bs;
}
}