如何使用字符串动态命名对象?

时间:2013-07-09 15:44:13

标签: java

我是Java初学者,并且想知道如何使用字符串命名类的实例,然后使用该字符串/对象创建case:,同时保持完全自动化(使用{例如{1}}?

2 个答案:

答案 0 :(得分:9)

变量名称只是程序员的一种便利 - 在编译代码后,它们甚至不会被跟踪。因此,不可能像这样动态地命名变量。您可以尝试使用Map来模仿它,但是:

Map<String, MyClass> map = new HashMap<String, MyClass>();
map.put("xyz", new MyClass());  // or something like that

...

现在,您可以通过"xyz"引用与字符串map.get("xyz")关联的对象。

答案 1 :(得分:0)

虽然这是一个非常糟糕的主意(使用某种类型的hashmap),但可以使用称为reflection的绘画。我个人 推荐这个。

我们假设您的课程名为Foo,并且包含字段barbaz

现在,我们可以说我们在课程Foo内,因此我们可以使用this关键字。如果使用对相关对象的现有引用,请将this更改为它。 fName是我们想要的变量的名称。

Class<?> c = this.getClass();
Field ourField = c.getDeclaredField("fName");
Object ourValue = ourField.get(this);

请注意,这很痛苦,很慢,并且需要额外的工作来访问基元。

例如,如果ourFieldint,我们想要将最后一个值更改为:

int intVal=ourField.getInt(this);