有没有办法根据用户输入创建对象的名称?
例如。
Object scan.nextLine() = new Object();
不,你不能这样做。
我建议有一个自定义类并存储 instanceName:
public class MyClass {
private String instanceName;
public MyClass(String instanceName) {
this.instanceName = instanceName;
}
}
MyClass myObj = new MyClass(scan.nextLine());
不,这是不可能的。Java中没有动态变量。Java 变量名必须在编译时在源代码中声明。
如果要使用用户输入的值存储对象,您可以尝试使用 aMap
来保存数据,如下所示。
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
不,你不能在 java 中这样做。因为您应该已经定义了一个类来创建它的对象。
有一些方法可以让你假装这样做。您可以使用地图来感知动态命名的对象。但是,既然您说您是初学者,那么简短的回答是否定的。确保你知道你在你的例子中要求什么。你的例子相当于说:
String line = "foo";
Object line = new Object();
我的猜测是这不是你想要的(而且不可能)。
鉴于线
Type variable_name = expression ;
该名称variable_name
仅用于引用表达式结果的其余范围。你知道Java是一种编译语言,这些名字只对程序员有用。一旦编译器完成它的工作,它就可以使用转换表并将这些名称替换为它想要的任何 ID。
由于这些名称在运行时甚至不存在,因此无法在运行时为变量选择名称。
但是,您可能需要根据用户输入访问对象(例如在 PHP 变量 variables 中$$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));
}
}
与 a 相同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));
}
}