在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

上一篇: Get object name of a class from the user in Java

下一篇: Convert PHP object to associative array