2014-10-28 73 views
2

我没有比字符串列表更复杂的了。 我已经实现了几种方法来简化JAXB的使用来序列化各种类。Java:我可以使用JAXB来序列化一个字符串列表吗?

List没有其他类,它只是一个简单的List,我需要在运行时加载到ComboBox中,并允许用户在休闲时保存/加载内容。

我有可能使用JAXB来序列化一个List对象,如果是这样,如何?

+0

是的,这是可能的。如果列表由序列化类中的字段引用,则可以使用@XmlElement对其进行注释。另请参阅此可能的重复:http://stackoverflow.com/questions/1603404/using-jaxb-to-unmarshal-marshal-a-liststring – 2014-10-28 18:12:39

回答

0

JAXB要求您编组的对象是一个域对象。因此,您需要引入一个类似下面的包装来进行编组。

@XmlRootElement(name="strings) 
public class ListOfStrings { 

    private List<String> strings; 

    @XmlElement(name="string") 
    public List<String> getStrings() { 
     return strings; 
    } 

    public void setStrings(List<String> strings) { 
     this.strings = strings; 
    } 

} 
+0

这就是我害怕。我真的希望避免这种情况......噢。是否有可能将List <>类实现为另一个类并使用它? – Will 2014-10-28 18:14:46

+0

@我不确定你的意思是否可以将List <>类实现为另一个类并使用它? – 2014-10-28 18:18:11

+0

那么,你可以这样说: @XmlRootElement(name =“SaveableList”)public abstract class SaveableList implements List {} – Will 2014-10-28 18:23:03

1

这是可能的,但它会比用List场简单的包装类,效率较低。

继您对@ BlaiseDoughan的回答发表评论后,这里是您的SaveableList实施。基本上你需要的是一个实现List的类,并将所有的调用转发给内部的List实现。 ArrayList。在我的示例中,为了简单起见,我扩展了AbstractList

SaveableList实现:

class SaveableList extends AbstractList<String> { 

    @XmlElement(name="e") 
    private final List<String> list = new ArrayList<>(); 

    @Override 
    public String get(int index) { 
     return list.get(index); 
    } 

    @Override 
    public boolean add(String e) { 
     return list.add(e); 
    } 

    @Override 
    public int size() { 
     return list.size(); 
    } 

    // You might want to implement/override other methods which you use 
    // And is not provided by AbstractList 

} 

实例:

List<String> list = new SaveableList(); 
list.add("one"); 
list.add("two"); 

// Save it to XML 
JAXB.marshal(list, new File("list.xml")); 

// Load it from XML: 
List<String> list2 = JAXB.unmarshal(new File("list.xml"), SaveableList.class); 

这里是它产生的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<saveableList> 
    <e>one</e> 
    <e>two</e> 
</saveableList> 
相关问题