我有一个Person带有一些元素的xsd文件.一些元素具有属性minOccurs和maxOccurs集合.xsd文件中的两行可能如下所示.
<xsd:element name="NameOfElement" minOccurs="0" maxOccurs="unbounded">
<xsd:element name="NameOfAnotherElement" minOccurs="0">
Run Code Online (Sandbox Code Playgroud)
在NetBeans中,我想使用JAXB生成此xsd文件的Java类.只有minOccurs属性的所有元素都在生成的Personjava文件中获取set和get方法,但在xsd文件中设置了两个minOccurs和maxOccurs属性的元素将成为List.所以上面的xsd行在生成之后就变成了这个:
@XmlElement(name = NameOfElement)
protected List<Person.NameOfElement> nameOfElement;
@XmlElement(name = NameOfAnotherElement)
protected Person.NameOfAnotherElement nameOfAnotherElement;
Run Code Online (Sandbox Code Playgroud)
奇怪的是,变量nameOfAnotherElement在Personjava类中同时nameOfElement获取set和get方法,并且只获取get方法.
为什么List<>在Java代码中成为元素的元素不会获得set方法(那些具有属性minOccurs并maxOccurs在xsd中设置的元素)?
所以我的问题是我不能将NameOfElement设置为Person对象,因为它错过了set方法,但它包含一个get方法!为什么会这样?
如果你将maxOccurs设置为!= 1,它可以包含该元素的多个实例,因此它将成为一个列表.
您应该使用get方法,然后将元素添加到该列表.像这样的东西:
List<Person.NameOfElement> myList = doc.getNameOfElement();
myList.add(obj);
Run Code Online (Sandbox Code Playgroud)
编辑:如果您已经有一个想要使用的列表,您可以执行以下操作:
doc.getNameOfElement().addAll(myList);
Run Code Online (Sandbox Code Playgroud)