我有一些使用JAXB从XSD生成的类。JAXB自定义绑定的一个选项是指定java.util.List
实现类。例如,我可以指定JAXB使用类java.util.LinkedList
,生成的代码将包括以下内容:
if (myList == null)
myList = new java.util.LinkedList();
我希望实现返回一个javafx.collections.ObservableList
,但找不到任何实现该接口并具有默认构造函数的具体类。有人知 prop 有默认构造函数的javafx.collections.ObservableList
的具体实现吗?
2条答案
按热度按时间ddarikpa1#
此静态函数将为您提供
ObservableList
的具体实现:ubof19bj2#
好了,有两种方法可以做到这一点。第一种是实现自己的
javafx.utils.ObservableList
。以下实现在ModifiableObservableListBase的文档中提供(略有修改):然后JAXB可以使用这个类作为实现列表类型,方法是将以下内容添加到绑定文件中:
第二个选项,也是我决定使用的选项,是配置JAXB marshaller/unmarshaller以使用从生成的类继承的自定义实现类。假设XSD定义了一个名为“ItemCollectionType”的复杂类型,它包含一个名为“Item”的元素定义和unbounded
maxOccurs
。然后我只需将以下内容添加到JAXB绑定文件:上面强制生成的代码中的每个
ItemCollectionType
被替换为类型myNamespace.ItemCollection
。然后,生成的ItemCollectionType
的实现包括以下代码:然后,我在
myNamespace.ItemCollection
中覆盖这个方法:当然,这两个选项并不相互排斥,我可以很容易地实现它们,这将把
myNamespace.ItemCollection.getItems
的实现简化为一个简单的强制转换。