在Java中获取用户的类的对象名称
我希望用户输入要在代码中使用的对象的名称。 例如,如果我有一个班
public class Person{
.......
}
现在,而不是我创建一个具有特定名称的对象
Person student;
我想让用户输入对象的名字,比如老师,然后创建一个班主任的对象老师。 我不知道这是否甚至可能在Java中,我查找的许多解决方案都是使用地图,但对于我来说,解释并不够清晰,因为我对java很陌生。
所以,如果任何人都可以解释如何使用代码片段来完成这将是美好的。
也请解释hashmaps如何在java中工作,以及它们是否可以用来实现上述问题。 如果用代码示例进行解释,我将非常感激
这是不可能的。 局部变量的名称在编译后的Class文件中甚至不是永久的。 字段的名称在那里,因为它是API的一部分,但是您将不得不修改类文件运行时 - 这不是您想要的。
使用Hashtable,可能会这样做:
Hashtable<String, Person> hashtable = new Hashtable<>();
hashtable.put("student", new Person());
然后你可以通过以下方式获得你的“变量”:
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);
}
}
链接地址: http://www.djcxy.com/p/23649.html