在java中调用带有变量名的对象方法

Kev*_*uno 0 java

我想从Person类中调用一个方法"Talk".让我们说很多人都有很多物品.因此,如果我想让用户输入他想要调用方法的人的名字,我如何将用户输入存储在变量中,然后使用它来调用方法,如下所示:

Scanner name= new Scanner(System.in);
String input= name.next();
input.Talk();
Run Code Online (Sandbox Code Playgroud)

做的绝望:

 switch (input) {
        case "John":  John.Talk();
                 break;
        case "Alex":  Alex.Talk();
                 break;
        case "Albert":  Albert.Talk();
                 break;
        ...
}
Run Code Online (Sandbox Code Playgroud)

我希望我解释得很好.我认为这是一个简单的概念,因此必须有一个解决方案.

Psh*_*emo 6

你可能想用Map<String,Person>.在这种地图,你put("Alex", AlexObject)当用户会写Alex,你可以简单地获取存储在地图关键人物对象Alex

map.get(nameFromScanner).Talk()
Run Code Online (Sandbox Code Playgroud)

但要小心,因为如果map不包含该名称,get将返回,null因此您将尝试调用Talknull,这将抛出NullPointerException.

所以你可以尝试做类似的事情

Person p = map.get(nameFromScanner);
if (p != null){
    p.Talk();
}
Run Code Online (Sandbox Code Playgroud)

或者从Java 8开始我们可以使用类似的东西

Optional.ofNullable(map.get(nameFromScanner)).ifPresent(Person::Talk);
Run Code Online (Sandbox Code Playgroud)