有没有办法根据用户输入创建对象的名称?
例如。
Object scan.nextLine() = new Object();
答案 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));
}
}