在我们的java应用程序中,我需要保存用户提供的多组值。为了处理这些数据,我使用的是ArrayList< ArrayList<对象>取代。当我将这些数据发送给JAXB marshaller时,它正在编写我的XMLElementWrapper和XMLElement名称,但它没有写出每个XMLElement的内容。在这个每个XMLElement应该是内部ArrayList。当我解组时,我得到相同大小的ArrayList,但内部ArrayList内容为空,大小为零。
我们有另一个ArrayList<对象>在编组和解组时,同一类中的实现正如预期的那样工作。
在编组ArrayList类型的对象时,我可能会出错? ArrayList<对象> > ?
答案 0 :(得分:0)
我认为如果您的主变量是List,那么列表可以包含ArrayList类型的对象。因此您可能不需要将其定义为ArrayList,因为您可以定义与ArrayList相同的结构。
您可以尝试的另一个选项是创建另一个基本上包含列表的类。那么你的主类可能只是一个ArrayList,那么YourClass实际上可以包含它自己的列表。
我还建议使用List代替ArrayList。当我第一次启动Java时,我也使用了ArrayList,但是你想使用更通用的List接口。 ArrayList和其他类型实现List接口,因此您希望将变量定义为List incase下面的类型。
答案 1 :(得分:0)
@XmlJavaTypeAdapter(IdAdapter.class)
private ArrayList<ArrayList<String>> _dataSet = null;
private static class IdAdapter extends XmlAdapter<RowList, ArrayList<ArrayList<String>>>
{
@Override
public ArrayList<ArrayList<String>> unmarshal(RowList v)
throws Exception
{
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
for(ColumnList myList:v.rowList)
{
list.add(myList.columnList);
}
return list;
}
@Override
public RowList marshal(ArrayList<ArrayList<String>> v)
throws Exception
{
RowList rowList = new RowList();
for(ArrayList<String> innerList:v)
{
ColumnList myList = new ColumnList();
myList.columnList = innerList;
rowList.rowList.add(myList);
}
return rowList;
}
}
@XmlRootElement(name="RowList")
private static class RowList
{
@XmlElement(name="RowValues")
ArrayList<ColumnList> rowList = new ArrayList<SpoolDataSet.ColumnList>();
}
@XmlRootElement(name="ColumnList")
private static class ColumnList
{
@XmlElement(name="ColumnValues")
ArrayList<String> columnList = new ArrayList<String>();
}
我为ArrayList&gt;做了这个您也可以将字符串更改为对象。