如何在Java中动态命名对象?
假设我需要制作一系列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的字符串数组。基本上我希望能够创建一个名称由其他函数决定的数组对象。 我为什么不能这样做? 我只是傻了吗?
Java中没有任何“变量变量”(即变量名变量),但您可以创建地图或数组来处理您的特定问题。 当您遇到一个让您认为“我需要我的变量动态更改名称”的问题时,您应该尝试思考“关联数组”。 在Java中,您可以使用Map
获取关联数组。
也就是说,您可以保留数组列表,例如:
List kList = new ArrayList(); for(int k = 0; k < 5; k++){ kList.add(new String[3]); }
或者也许更接近您所追求的,您可以使用地图:
Map kMap = new HashMap(); for(int k = 0; k < 5; k++){ kMap.put(k, new String[3]); } // access using kMap.get(0) etc..
其他人已经提供了很好的答案,但只是为了涵盖所有基础,Java确实有arrays数组。
String[][] k = new String[5][3]; k[2][1] = "Hi!";
现在你没有5个名为k1
, k2
, k3
, k4
, k5
变量,每个变量都是一个String[3]
……
…但你有一个String[]
, k[0]
, k[1]
, k[2]
, k[3]
, k[4]
的String[3]
,每个都是一个String[3]
。
您将在Java中获得的最接近的是:
Map map = new HashMap(); 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
对象一起工作就像一个……那样。
您想要做的是元编程 – 编程程序,Java不支持(它只允许元数据通过注释)。 但是,对于这样一个简单的用例,您可以创建一个方法,该方法将获取一个int并返回您想要的字符串数组,例如通过访问数组数组。 如果您想要一些更复杂的命名约定,请考虑使用swtich语句获取少量值并映射更多值。 对于具有自定义名称的固定数量的值,定义一个Enum,它可以作为参数传递。