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

时间:2015-08-03 16:53:22

标签: 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;
        ...
}

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

3 个答案:

答案 0 :(得分:6)

您可能想要使用Map<String,Person>。在该地图中,您put("Alex", AlexObject),当用户编写Alex时,您只需使用密钥Alex获取存储在地图中的人物对象

map.get(nameFromScanner).Talk()

但要小心,因为如果map没有包含该名称,get将返回null,因此您将尝试在null上调用Talk,这将抛出NullPointerException。

所以你可以尝试做类似

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

或者从Java 8开始,我们可以使用类似

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

答案 1 :(得分:0)

我不确定你在问什么,但你可以使用界面和查找在运行时找到正确的对象。

假设您的人员存储在一个集合中并且可以使用“谓词”找到,您可以使用流和过滤器来处理:

Optional<Person> op = lst.stream().filter(person -> person.firstName.equals(input.getText())).findFirst();
if(op.isPresent()){
    op.get().talk();
}    

答案 2 :(得分:0)

您可以使用工厂设计模式来获取对象。