假设:
我有一个类动物,我想创建一个名为 "bird"
的类的实例。 "bird"
存储在String
中。
怎么做?
String variable_name = "bird";
我想将variable_name中的字符串用作动物的实例。
Animal bird = new Animal();
谢谢。。。
你可以用反射来做到这一点
public class DynamicSetTest {
private Animal animal1 = null;
private Animal animal2 = null;
private Animal animal3 = null;
public Animal getAnimal1() {
return animal1;
}
public Animal getAnimal2() {
return animal2;
}
public Animal getAnimal3() {
return animal3;
}
public void setField(String name, Animal value) throws Exception {
Field field = this.getClass().getDeclaredField(name);
field.set(this, value);
}
public static void main(String[] args) throws Exception {
DynamicSetTest t = new DynamicSetTest();
Animal anAnimal = new Animal();
t.setField("animal3", anAnimal);
assert t.getAnimal3() == anAnimal;
}
}
请注意,每个可能的名称都有一个字段。如果变量不存在,您还必须处理这种情况。
我想知道您是否想使用 Map 并使用该名称添加对象,例如
Map<String, Animal> animals = new HashMap<String, Animal>();
animals.put("animal3", anAnimal);
assert animals.get("animal3") == anAnimal;
name
添加为 Animal
中的字段,并在构造函数中请求它。
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
}
然后,当您构建动物用途时:
Animal bird = new Animal("bird");
Animal deer = new Animal("deer");
Animal wumpus = new Animal("wumpus");