java - java中通过变量名调用对象方法

标签 java

我想从 Person 类中调用“Talk”方法。 可以说我有很多东西,适合很多人。因此,如果我想让用户输入他想要调用该方法的人的姓名,如何将用户输入存储在变量中,然后使用它来调用该方法,如下所示:

Scanner name= new Scanner(System.in);
String input= name.next();
input.Talk();

已执行的操作:

 switch (input) {
        case "John":  John.Talk();
                 break;
        case "Alex":  Alex.Talk();
                 break;
        case "Albert":  Albert.Talk();
                 break;
        ...
}

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

最佳答案

您可能想使用Map<String,Person> 。在那张 map 上你put("Alex", AlexObject)当用户写 Alex 时您可以简单地使用键 Alex 获取存储在 map 中的 Person 对象喜欢

map.get(nameFromScanner).Talk()

但要小心,因为如果 map 不包含该名称,get将返回null所以你会尝试调用Talk如果为 null,则会抛出 NullPointerException。

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

Person p = map.get(nameFromScanner);
if (p != null){
    p.Talk();
}

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

Optional.ofNullable(map.get(nameFromScanner)).ifPresent(Person::Talk);

关于java - java中通过变量名调用对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31792759/

相关文章:

Java Collection按不同参数排序

java - 如何使用 Java 从 Web 服务保存大文件?

java - 从 Sql 中的另一个表插入部分值,然后手动插入其他表

java - 如何在java中更新数据框的所有列

java - ORA-00979 : not a GROUP BY expression

java - RallyRestAPI 查询 ScopedAttributeDefinition 类型

java - 在java中公平地生成和分配随机数

java - F 点与 X 成 90 度

java - 使用 java 列出 ldap 中的所有 sAMAccountName

java - 在自定义 java 库模块中编译 android 模块时出现 Gradle 警告 "unspecified depends on libraries but is a jar "