Java 如何获取单个数组名作为数组数组的字符串

Java 如何获取单个数组名作为数组数组的字符串,java,arrays,Java,Arrays,如上所述,我声明了一个名为facilityTableAttrs的数组数组 我有两个问题: 1) 是否可以在一个步骤中完成上述数组声明 2) 我希望通过以下方式获得这些1D阵列的单个阵列名称: // Facility table attributes to be read in json format String facilityName[], recApp[], recFacility[], sendApp[], sendFacility[], enable[], donene

如上所述,我声明了一个名为facilityTableAttrs的数组数组

我有两个问题:

1) 是否可以在一个步骤中完成上述数组声明

2) 我希望通过以下方式获得这些1D阵列的单个阵列名称:

// Facility table attributes to be read in json format
String facilityName[], recApp[], recFacility[], sendApp[], 
       sendFacility[], enable[], doneness[], retryLimit[], 
       watchDelay[], retryDelay[], ackTimeout[], 
       keepConOpen[], sendTimeout[], cleanupDelay[], 
       host[], port[];

String facilityTableAttrs[][] = new String[][] { 
       facilityName, recApp, recFacility, sendApp, 
       sendFacility, enable, doneness, retryLimit, 
       watchDelay, retryDelay, ackTimeout, keepConOpen, 
       sendTimeout, cleanupDelay, host, port};
for(i=0;i

但它失败了。如何将单个数组名获取为字符串?

您声明的第一个数组列表似乎没有在任何地方初始化

因此,它们是
null
,对其中任何一个调用
toString
,都会导致抛出
NullPointerException
,因此“它失败”

顺便说一下,在非空数组上调用
toString
实际上会打印类似于
对象.toString
表示的内容,这不是您想要的(
Arrays.toString(myArray)
是您的朋友)

在将它们添加到主
字符串[]【】
之前,您可以初始化每个数组并选择性地填充它们,但我建议您不要这样做

相反,研究集合框架

这里可以使用的是
地图

甚至更好的是,一个具有属性的自定义对象,例如
List facilityName
List recApp
,等等


最后,请注意变量命名,根据。

这在数组中是不可能的。您需要使用地图,如下所示:

for(i = 0; i < facilityTableAttrs.length; i++) {
    System.out.println(facilityTableAttrs[i].toString());
}
Map myMap=newhashmap();
您需要为您的问题选择正确的数据结构

数组仅用于存储值,它们对名称的边界不感兴趣。
另一方面,映射非常适合将名称(唯一的键)绑定到任何类型的值。

我建议使用包装类:

Map<String, List<String>> myMap = new HashMap<String, List<String>>();
要为设施增加价值,您需要执行以下操作:

Facility[] facilities = new Facility[] {
    new Facility("facility 1"),
    new Facility("facility 2"),
    new Facility("facility 3"),
    new Facility("facility 4"),
};
for(Facility facility : facilities) {
    System.out.println(facility.getName());
}
如果需要按名称查找设施,请使用映射而不是数组:

Facility facility = facilities.get(0);
facility.getValues().add("bla");
。。。
//请参见下面的createLookup方法
映射设施=createLookup(
新授信(“授信1”),
新授信(“授信2”),
新授信(“授信3”),
新贷款(“贷款4”);
//打印姓名
对于(Facility:Facility.values()){
System.out.println(facility.getName());
}
//增值
设施=设施。获取(“设施3”);
facility.getValues().add(“bla”);
}
私有映射createLookup(设施..设施){
//使用TreeMap可以对键进行排序
映射查找=新建树映射();
用于(设施:设施){
lookup.put(facility.getName(),facility);
}
返回查找;
}

我无法填充它们,因为大小最初是未知的,它将根据用户填充为json字符串的值进行拾取。我只需要数组名,如“FacilityName”“RecApp”等@kingsmasher1,然后我强烈建议使用一个自定义对象,将大量的
列表
作为属性,或者更糟糕但可以接受的是,如图所示使用一个
映射。但在这种情况下,我需要初始化每个单独的列表,这会增加代码大小,我也不能有一个列表数组。类似于
List facilityTableAttrs[]=新列表{List FacilityName,ListRecApp
在Java中是不允许的。您需要初始化添加对象的任何对象,无论是数组还是
List
。您不能初始化
List
本身,它是一个接口。您可能希望
ArrayList
作为您的具体类。正如我已经说过的,您最好使用
映射e> 不是列表[]。变量名称应以小写字符开头,因此“facilityName”而不是“facilityName”。此外,“String[][]facilityTableAttrs”比“String facilityTableAttrs[][]”更常见(这也是正确的)Java中不允许使用.Array os list。初始化每个属性将减少代码大小,这也是我希望使用数组的原因。Java中不允许使用类似于
list facilityTableAttrs[]=new list{list FacilityName,ListRecApp
的内容
Facility facility = facilities.get(0);
facility.getValues().add("bla");
    ...
    // see createLookup method below
    Map<String, Facility> facilities = createLookup(
        new Facility("facility 1"),
        new Facility("facility 2"),
        new Facility("facility 3"),
        new Facility("facility 4"));

    // print names
    for(Facility facility : facilities.values()) {
        System.out.println(facility.getName());
    }

    // add a value
    Facility facility = facilities.get("facility 3");
    facility.getValues().add("bla");
}

private Map<String, Facility> createLookup(Facility.. facilities) {
    // use TreeMap to have sorted keys
    Map<String, Facility> lookup = new TreeMap<>();
    for(Facility facility : facilities) {
        lookup.put(facility.getName(), facility);
    }
    return lookup;
}