如何在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)
            }
        },
    };
}


这仅打印一行数据。我确定adding values to Array of Object but really don't know how to fix.时我会弄错

请帮我解决这个问题

最佳答案

您不能将元素添加到数组-您只能在数组中设置元素。

我建议您改用List<Object[]>

List<Object[]> hexgenSecurityInferenceData = new ArrayList<Object[]>();
for (String methodName:knowGoodMap.keySet()) {
    hexgenSecurityInferenceData.add(new Object[] {
        knowGoodMap.get(methodName),
        new Object[] {
            methodPropertiesMap.get(methodName),
            methodParametersMap.get(methodName)
        }
     });
 }


(我已经删除了强制类型转换,因为它们毫无意义...无论如何,您都将值存储在Object[]中。强制类型转换的唯一好处是,如果对象属于意外类型,则会导致异常。)

如果确实需要,您仍然可以使用数组,但是您需要以正确的大小开始创建它,然后保留“当前索引”。这样一来,使用数组通常要比列表难。

如果确实需要一个数组,则可以从列表中创建一个:

Object[][] array = hexgenSecurityInferenceData.toArray(new Object[0][]);


与直接直接填充数组相比,以这种方式分两个阶段进行操作会更简单。

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


不要只是使用Object[]来创建一个封装数据的类型。使用当前的方法,您甚至在Object[]内都有嵌套的Object[] ...读取该数据的任何代码都将是可怕的。
使用entrySet()代替keySet(),则不需要通过键获取值

10-02 09:12
查看更多