是否可以在一个数组中存储多种类型的数组?

时间:2014-10-01 23:04:07

标签: java arrays xml multidimensional-array types

我目前正在开发一个项目,我从XML文件中获取一组数据。 XML文件有多个节点,用于存储不同的数据类型(字符串,整数和布尔值)。 Java将这些作为字符串返回,这很好,因为您可以将它们转换为程序中的正确数据类型。当返回节点时,我想将它们放入一个正确类型的数组中,并将每个数组存储在一个主数组中,以便以后在我的程序中使用。在我的XML文件中,我希望有一个节点,其中可以有多个具有相同标签的子节点,这就是我使用多维数组的原因。

我尝试使用Object[][]Variable[][]没有成功,除非我遗漏了一些简单的事情(可能是这种情况)。

XML示例:

<parent>
    <child1>string</child1>
    <child2>int</child2>
    <child2>int</child2>
    <child3>boolean</child3>
</parent>

Java示例:

NodeList nList = doc.getElementsByTagName("parent");
NodeList nlAttributes = nList.item(cardId).getChildNodes();
List<String> lElements = new ArrayList<String>();
List<String> lRepeateElement = new ArrayList<String>();
for(int i = 0; i <nlAttributes.getLength(); i++){
    if(nlAttributes.item(i).getNodeType()!=3&&nlAttributes.item(i).getNodeType()!=8){
        if(nlAttributes.item(i).getNodeName().equals("effect")){
            lRepeateElement.add(nlAttributes.item(i).getTextContent());
        }else{
            lElements.add(nlAttributes.item(i).getTextContent());
        }
    }
}
aRepeatElements = new String[lRepeateElement.size()];
for(int i = 0; i<lRepeateElement.size(); i++){
    aRepeatElements[i]=lRepeateElement.get(i);
}
sElements = new String[lElements.size()];
oElements = new Variable[lElements.size()+1][]; //oElements = new Object[lElements.size()+1][];
for(int i = 0; i<lElements.size(); i++){
    if(i==4){
        oElements[i]=aRepeatElements;//incompatible types: String[] cannot be converted to Variable/Object[] -> this still exists after attempting to casts
    }else{
        sElements[i]=lElements.get(0);
        String[] temp = new String[1];
        temp[0]=sElements[i];//incompatible types: String[] cannot be converted to Variable/Object[] -> this still exists after attempting to casts
        oElements[i]=temp;
        lElements.remove(0);
    }
}

1 个答案:

答案 0 :(得分:0)

Object[][]将解决问题,因为Java中的所有内容都是Object。除了原语之外的所有东西,就是这样!

要解决这个问题,您需要做的就是包装基元:

  • int - &gt; Integer
  • boolean - &gt; Boolean
  • ...