创建一个名称存储在字符串变量中的变量

时间:2014-04-25 01:20:32

标签: java string class instance instance-variables

让我们说:

我有一个Class Animal,我想用名称"bird"创建该类的实例。 "bird"存储在String

怎么做?

String variable_name = "bird";

我想将variable_name中的字符串用作Animal的实例。

Animal bird = new Animal();

...谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用反射

执行此操作
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;

答案 1 :(得分:0)

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