我希望用户输入要在代码中使用的对象的名称。例如,如果我有一个班级
public class Person{
.......
}
现在而不是我创建一个具有特定名称的对象,如
Person student;
我希望用户输入对象的名称,可能就像老师一样,然后将创建班级人员的对象教师。 我不知道在java中是否甚至可以实现这一点,我查找的许多解决方案都使用了地图,但由于我是java新手,因此解释不够明确。
所以,如果有人能解释如何使用代码片段来完成它,那就太棒了。
另外请解释hashmaps如何在java中工作,以及它们是否可用于实现上述问题。如果用代码示例解释,我将非常感激
答案 0 :(得分:2)
这是不可能的。局部变量的名称在编译的Class文件中甚至不是持久的。字段的名称在那里,因为它是API的一部分,但您必须修改类文件运行时 - 这不是您想要的。
使用Hashtable,可以这样做:
Hashtable<String, Person> hashtable = new Hashtable<>();
hashtable.put("student", new Person());
然后你可以得到你的变量&#34;由:
Person person = hashtable.get("student");
当我猜你想要做什么时,这是一个更有用的例子:
import java.util.Hashtable;
import java.util.Scanner;
public class Test {
public static class Person {
public final String name;
public final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Name: " + name + ", age: " + age;
}
}
public static class PersonsList {
private Hashtable<String, Person> persons = new Hashtable<String, Test.Person>();
public void addPerson(Person person) {
this.persons.put(person.name, person);
}
public Person findPerson(String name) {
return persons.get(name);
}
@Override
public String toString() {
return persons.toString();
}
}
public static void main(String[] args) {
PersonsList personsList = new PersonsList();
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.equals("END")) {
break;
}
try {
String[] parts = line.split(" ");
String name = parts[0];
int age = Integer.valueOf(parts[1]);
personsList.addPerson(new Person(name, age));
} catch (NumberFormatException e) {
System.out.println("Age must be an decimal non-floating-point number.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("You must enter both name and age");
}
}
scanner.close();
System.out.println(personsList);
}
}