我想从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;
...
}
我希望自己能够解释得很好。我认为这是一个简单的概念,因此必须有一个解决方案。
答案 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)
您可以使用工厂设计模式来获取对象。