Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建一个名称存储在字符串变量中的变量_Java_String_Class_Instance_Instance Variables - Fatal编程技术网

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

Java 创建一个名称存储在字符串变量中的变量,java,string,class,instance,instance-variables,Java,String,Class,Instance,Instance Variables,比如说: 我有一个类Animal,我想创建一个名为“bird”的类实例。 “bird”存储在字符串中 怎么做 String variable_name = "bird"; 我想使用变量_name中的字符串作为动物的实例 Animal bird = new Animal(); 谢谢…在动物中添加名称作为字段,并在构造函数中请求它 class Animal { String name; public Animal(String name) { this.nam

比如说:

我有一个类Animal,我想创建一个名为
“bird”
的类实例。
“bird”
存储在
字符串中

怎么做

String variable_name = "bird";
我想使用变量_name中的字符串作为动物的实例

Animal bird = new 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");

您可以通过反射来实现这一点

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<String, Animal> animals = new HashMap<String, Animal>();
animals.put("animal3", anAnimal);
assert animals.get("animal3") == anAnimal;
Map动物=新HashMap();
动物。put(“动物3”,动物);
断言动物。获取(“动物3”)==动物;

不太清楚你在问什么。您想在
动物
中有一个字段,当访问该字段时将返回
“bird”
,还是想让
动物
的实际实例名称基于
字符串中的某个值,在这种情况下,
bird
?我想使用variable\u name中存储的字符串作为Animaldo类型的新变量。您想实例化一个新的
Animal
并将其分配给名为“variable\u name”的字段吗?将其分配给名为“variable\u name”的字段为什么要使用该字符串来确定变量名称?局部变量的名称不会影响声明它的块之外的代码。例如:Animal deer=new Animal(“deer”);在您的示例中,您编写了动物鹿。但是我想使用variable_name中存储的字符串作为Animal类型的新变量,比如:string variable_name=“deer”;动物变量_name=新动物();总的来说,反射不值得费心。我同意,这就是为什么我建议用地图来按名称存储对象。实际上这是个好主意。