使用scanner创建对象标识符?

时间:2013-03-05 11:02:06

标签: java java.util.scanner identifier

有没有办法根据用户输入创建对象的名称?

例如。

Object scan.nextLine() = new Object();

5 个答案:

答案 0 :(得分:1)

不,你不能这样做。

我建议使用自定义类并存储instanceName:

public class MyClass {

    private String instanceName;
    public MyClass(String instanceName) {
        this.instanceName = instanceName;
    }

}

MyClass myObj = new MyClass(scan.nextLine());

答案 1 :(得分:1)

这是不可能的。 Java中没有动态变量。必须在编译期间在源代码中声明Java变量名。

如果想要使用用户输入的值存储对象,可以尝试使用Map保存数据,如下所示。

Map<String, Object> objects = new HashMap<String, Object>();
String name = scan.nextLine();

Object obj = new Object();
objects.put(name, obj); // saving the objects in Map

答案 2 :(得分:0)

没有。你不能在java中这样做。因为你应该已经定义了一个类来创建它的对象。

答案 3 :(得分:0)

有些方法可以假装这样做。您可以使用地图来表示动态命名对象的感知。但既然你说你是初学者,那么简短的答案就是否定。尽管如此,请确保您知道自己要求的内容。你的例子相当于说:

String line = "foo";
Object line = new Object();

我的猜测是,这不是你想要的(而且是不可能的)。

答案 4 :(得分:0)

给定行

Type variable_name = expression ;

名称variable_name仅用于范围的其余部分,用于引用表达式的结果。您知道Java是一种编译语言,这些名称仅对程序员有用。一旦编译器完成其工作,它就可以使用转换表并用它想要的任何ID替换这些名称。

由于这些名称在运行时甚至不存在,因此无法在运行时选择变量的名称。

但是,您可能需要根据用户输入访问对象(例如,在PHP变量变量$$a_var中)。根据您的上下文,您可以使用反射来访问实例成员,或使用简单的Map<String, Object>。反射示例:

public class VariableRuntime {

    static class Person {
        public String first, last, city; 
    }

    public static void main(String[] args) throws Exception {
        Person homer = new Person();

        homer.first = "Homer";
        homer.last = "Simpson";
        homer.city = "Springfield";

        System.out.println("What do you want to know about Homer? [first/last/city]");

        String what = new Scanner(System.in).nextLine();
        Field field = Person.class.getDeclaredField(what);

        System.out.println(field.get(homer));
    }

}

Map<String, String>相同:

public class VariableRuntime {


    public static void main(String[] args) throws Exception {
        Map<String, String> homer = new HashMap<String, String>();

        homer.put("first", "Homer");
        homer.put("last", "Simpson");
        homer.put("city", "Springfield");

        System.out.println("What do you want to know about Homer? [first/last/city]");

        String what = new Scanner(System.in).nextLine();

        System.out.println(homer.get(what));
    }

}