我是Java初学者,并且想知道如何使用字符串命名类的实例,然后使用该字符串/对象创建case:
,同时保持完全自动化(使用{例如{1}}?
答案 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
,并且包含字段bar
和baz
。
现在,我们可以说我们在课程Foo
内,因此我们可以使用this
关键字。如果使用对相关对象的现有引用,请将this
更改为它。 fName
是我们想要的变量的名称。
Class<?> c = this.getClass();
Field ourField = c.getDeclaredField("fName");
Object ourValue = ourField.get(this);
请注意,这很痛苦,很慢,并且需要额外的工作来访问基元。
例如,如果ourField
是int
,我们想要将最后一个值更改为:
int intVal=ourField.getInt(this);