Java 在运行时向对象数组添加多个数据

Java 在运行时向对象数组添加多个数据,java,for-loop,Java,For Loop,如何在java中为二维对象数组设置值 以下是我的for循环: Object[][] hexgenSecurityInferenceData = null; for (String methodName: knowGoodMap.keySet()) { hexgenSecurityInferenceData = new Object[][] { { (KnownGoodInfoRO) knowGoodMap.get(methodName), new

如何在java中为二维对象数组设置值

以下是我的for循环:

Object[][] hexgenSecurityInferenceData = null;
for (String methodName: knowGoodMap.keySet()) {
    hexgenSecurityInferenceData = new Object[][] {
        {
            (KnownGoodInfoRO) knowGoodMap.get(methodName), new Object[] {
                (MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)
            }
        },
    };
}
这只打印一行数据。我确信在向对象数组添加值时会出错,但我真的不知道如何修复

请帮助我解决此问题

您不能向数组中添加元素-只能在数组中设置元素

我建议你列一份清单:

以这种方式分两个阶段进行比直接预先填充阵列更简单

实际上,我建议进行两项进一步的修改:

不要只使用对象[]来进行此操作。。。创建一个类型来封装此数据。使用当前的方法,您甚至在对象[]中有一个嵌套对象[]。。。任何读取这些数据的代码都将是可怕的。 使用entrySet而不是keySet,则不需要通过键获取值 不能向数组中添加元素-只能在数组中设置元素

我建议你列一份清单:

以这种方式分两个阶段进行比直接预先填充阵列更简单

实际上,我建议进行两项进一步的修改:

不要只使用对象[]来进行此操作。。。创建一个类型来封装此数据。使用当前的方法,您甚至在对象[]中有一个嵌套对象[]。。。任何读取这些数据的代码都将是可怕的。 使用entrySet而不是keySet,则不需要通过键获取值
您有一个对象矩阵对象[],因此如果要填充此二维数组,必须执行以下操作:

Object[][] hexgenSecurityInferenceData=new Object[10][10];
for(int i=0; i<10;i++){
   for(int j=0; j<10;j++){
        hexgenSecurityInferenceData[i][j] = new Object();
   }
}

但是正如Jon所指出的那样,最好有自己的实现/封装,而不是使用Object

您有一个对象矩阵Object[]],因此如果您想填充这个二维数组,您必须执行以下操作:

Object[][] hexgenSecurityInferenceData=new Object[10][10];
for(int i=0; i<10;i++){
   for(int j=0; j<10;j++){
        hexgenSecurityInferenceData[i][j] = new Object();
   }
}
但是正如Jon所指出的,最好有自己的实现/封装,而不是使用对象,使用列表是解决这个问题的最佳方法。不过,您仍然可以通过初始化数组来使用对象[]

Object[][] hexgenSecurityInferenceData = new Object[knowGoodMap.keySet().size()][];
int i = 0;
for (String methodName : knowGoodMap.keySet()) 
{
  hexgenSecurityInferenceData[i][0] = new Object[][]
  {
     {(KnownGoodInfoRO) knowGoodMap.get(methodName), 
         new Object[]{(MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)}
     }
  };
   i++;
 }
使用列表是解决此问题的最佳方法。不过,您仍然可以通过初始化数组来使用对象[]

Object[][] hexgenSecurityInferenceData = new Object[knowGoodMap.keySet().size()][];
int i = 0;
for (String methodName : knowGoodMap.keySet()) 
{
  hexgenSecurityInferenceData[i][0] = new Object[][]
  {
     {(KnownGoodInfoRO) knowGoodMap.get(methodName), 
         new Object[]{(MethodPropertiesRO) methodPropertiesMap.get(methodName), (List) methodParametersMap.get(methodName)}
     }
  };
   i++;
 }


您正在循环内实例化对象[][]数组。您正在循环内实例化对象[][]数组。在此之后,如何将元素添加到HexGenSecurityReferenceData?因为它是一个二维数组,每个维度有两个索引,所以您必须迭代每个组合以填充数组Tanks Stephan,如何添加此数据{KnownGoodInfoROknowGoodMap.getmethodName,新对象[]{MethodPropertiesMethodPropertiesMap.getmethodName,ListmethodParametersMap.getmethodName},};使用二维数组更为棘手,因为您必须在创建实例时指定大小,Jon Skeet使用的方法是动态的,应该适合您。在此之后,如何将元素添加到HexGenSecurityReferenceData?因为它是二维数组,每个维度有两个索引,因此,您必须迭代每个组合以填充数组Tanks Stephan,如何添加此数据{KnownGoodInfoROknowGoodMap.getmethodName,新对象[]{MethodPropertiesMethodPropertiesMap.getmethodName,ListmethodParametersMap.getmethodName},};使用二维数组更为棘手,因为您必须在创建实例时指定大小,Jon Skeet使用的方法是动态的,应该适合您。谢谢Jon,但我必须继续使用我开始使用的方法,它是一个TestNG,必须返回Object[][],目前的方法有效,但我无法为其设置元素,正如Stepehan指出的,我在内部实例化了对象,现在我遵循了HexGenSecurityReferenceData[0][0]=新对象;但是在这之后,如何添加元素呢???@Anto:你根本不能。你必须接受数组是固定大小的。。。你必须先用合适的尺寸来创建它。但是,您可以将列表转换为对象[]。。。我将用该代码编辑我的答案。@Anto:还要注意,如果我们知道更多的上下文,我就不会建议更改以避免对象[][]。Jon Skeet,你总是摇滚,谢谢你的答案+1。谢谢Jon,但我必须继续我开始使用的方法,这是一个必须返回对象[]的TestNG,目前的方法可行,但我无法为其设置元素,正如Stepehan指出的那样,我在内部实例化了对象,现在我遵循了HexGenSecurityReferenceData[0][0]=新对象;但是在这之后,如何添加元素呢???@Anto:你根本不能。你必须接受数组是固定大小的。。。你必须先用合适的尺寸来创建它。但是,您可以将列表转换为对象[]。。。我将用这个代码编辑我的答案。@Anto:还要注意,如果我们知道更多的上下文,我就不会建议更改以避免对象[]。Jon Skeet,你总是摇滚,谢谢你的回答+1。