如何在 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 中,您可以使用 Maps 获得关联数组。

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

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!";

现在您没有名为 k1k2k3k4k5 的 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 中动态命名对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何动态命名和创建子对象属性?

如何在java中动态读取对象属性?

如何在 C++ 中正确使用命名空间?

如何在 Javascript 中调用动态命名的方法?

如何在 Java 中动态构造谓词

如何在 JPA 命名查询的 IN 子句中使用动态参数?