0

在我们的 java 应用程序中,我需要保存用户提供的多组值。为了处理这些数据,我使用了 ArrayList < ArrayList < Object >>。当我将此数据发送到 JAXB 编组器时,它正在写入我的 XMLElementWrapper 和 XMLElement 名称,但它没有写入每个 XMLElement 的内容。在此每个 XMLElement 应该是内部 ArrayList。当我解组时,我得到相同大小的 ArrayList,但内部 ArrayList 内容为空,大小为零。

我们在同一个类中有另一个单一的 ArrayList < Object > 实现,它在编组和解组时按预期工作。

如果编组 ArrayList < ArrayList < Object >> 类型的对象,我会在哪里出错?

4

2 回答 2

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> 完成了此操作,您也可以将字符串更改为对象。

于 2013-02-12T12:20:34.060 回答
0

我认为,如果您的主要变量是 List,则该列表可能包含本身类型为 ArrayList 的对象。所以你可能不需要把它定义为ArrayList,因为你可以定义和ArrayList一样的结构。

您可以尝试的另一个选择是创建另一个基本上包含列表的类。然后你的主类可能只是一个 ArrayList,然后 YourClass 实际上可以包含它自己的列表。

我还建议为此使用 List 而不是 ArrayList。当我第一次启动 Java 时,我也在使用 ArrayList,但您想使用更通用的 List 接口。ArrayList 和其他类型实现了 List 接口,因此您希望将变量定义为 List 以防其下的类型发生变化。

于 2012-09-23T14:39:14.073 回答