如何在Java中动态命名对象?

时间:2010-04-26 03:54:13

标签: java dynamic arrays object

假设我需要制作一系列String []对象。

我知道如果我想创建一个名为“test”的字符串数组来保存3个字符串我可以做

String [] test = new String [3];

但是我要说我需要制作一系列这些数组,我希望它们被命名为1,2,3,4,5 ......等等。无论我需要多少,我都不知道有多少我需要。

如何实现类似的效果:

for (int k=0; k=5; k++){ 
String[] k = new String[3];
}

哪个会创建5个名为1到5的字符串数组。基本上我希望能够创建一个名称由其他函数决定的数组对象。我为什么不能这样做?我只是傻了吗?

4 个答案:

答案 0 :(得分:21)

Java中没有任何“变量变量”(即具有变量名称的变量),但您可以创建地图或数组来处理您的特定问题。当您遇到一个让您认为“我需要我的变量动态更改名称”的问题时,您应该尝试思考“关联数组”。在Java中,您可以使用Map s获得关联数组。

也就是说,您可以保留数组列表,例如:

List<String[]> kList = new ArrayList<String[]>();
for(int k = 0; k < 5; k++){
   kList.add(new String[3]);
}

或者可能更接近您所追求的内容,您可以使用地图:

Map<Integer,String[]> kMap = new HashMap<Integer,String[]>();
for(int k = 0; k < 5; k++){
  kMap.put(k, new String[3]);
}
// access using kMap.get(0) etc..

答案 1 :(得分:7)

其他人已经提供了很好的答案,但只是为了涵盖所有基础,Java确实有数组阵列。

String[][] k = new String[5][3];
k[2][1] = "Hi!";

现在您没有名为k1k2k3k4k5的5个变量,每个变量都是String[3] ...

...但你有一个String[]k[0]k[1]k[2]k[3]k[4]的数组,每个是String[3]

答案 2 :(得分:4)

您将在Java中获得的最接近的是:

Map<String, String[]> map = new HashMap<String, String[]>();

for (int k=0; k=5; k++){ 
    map.put(Integer.toString(k), new String[3]);
}

// now map.get("3") will get the string array named "3".

请注意,"3"不是变量,但与map对象一起使用时,它就像一个... ...

答案 3 :(得分:2)

你想要做的是元编程 - 编程程序,Java不支持(它只允许元数据通过注释)。但是,对于这种简单的用例,您可以创建一个方法,该方法将获取一个int并返回您想要的字符串数组,例如通过访问数组数组。如果您想要一些更复杂的命名约定,请考虑使用swtich语句获取少量值并映射更多值。对于具有自定义名称的固定数量的值,定义一个Enum,它可以作为参数传递。