如何在 Java 中动态命名对象?
Posted
技术标签:
【中文标题】如何在 Java 中动态命名对象?【英文标题】:How do I dynamically name objects in Java? 【发布时间】:2011-02-12 06:07:30 【问题描述】:假设我需要制作一系列 String[] 对象。
我知道如果我想创建一个名为“test”的字符串数组来保存 3 个字符串,我可以这样做
字符串[] 测试 = 新字符串[3];
但是假设我需要制作一系列这样的数组,并且我希望它们被命名为 1,2,3,4,5... 等等。无论我需要多少,但我不知道有多少我需要。
如何实现与此类似的效果:
for (int k=0; k=5; k++)
String[] k = new String[3];
这将创建 5 个名为 1 到 5 的字符串数组。基本上,我希望能够创建名称由其他函数确定的数组对象。为什么我似乎不能这样做?我是不是很傻?
【问题讨论】:
您为这种行为考虑了哪些用例?也许知道我们可以帮助您找出一种 Java 方法来做您想做的事,而无需动态命名的变量。 【参考方案1】: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..
【讨论】:
【参考方案2】:其他人已经提供了很好的答案,但只是为了涵盖所有基础,Java 确实有数组数组。
String[][] k = new String[5][3];
k[2][1] = "Hi!";
现在您没有名为 k1
、k2
、k3
、k4
、k5
的 5 个变量,每个变量都是 String[3]
...
...但是您确实有一个 String[]
、k[0]
、k[1]
、k[2]
、k[3]
、k[4]
的数组,每个都是 String[3]
。
【讨论】:
【参考方案3】:在 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
对象结合使用时,它的工作原理类似于......。
【讨论】:
【参考方案4】:您想要做的就是所谓的元编程——编写一个 Java 不支持的程序(它只允许通过注解元数据)。但是,对于这样一个简单的用例,您可以创建一个方法,该方法将采用 int 并返回您想要的字符串数组,例如通过访问数组数组。如果您想要一些更复杂的命名约定,请考虑使用 swtich 语句获取少量值并使用 map 获取更多值。对于具有自定义名称的固定数量的值,请定义一个 Enum,它可以作为参数传递。
【讨论】:
以上是关于如何在 Java 中动态命名对象?的主要内容,如果未能解决你的问题,请参考以下文章