BlueJ中如何让Scanner.next()返回任意类型?及字符串调用对象方法问题
解决Scanner字符串转自定义对象调用方法的问题
这个坑我之前踩过!你遇到的错误本质很简单:Scanner.next()返回的是字符串类型,而你直接把它赋值给testClass类型的变量,Java是强类型语言,这俩完全不是一回事,肯定会报类型不兼容的错。
要实现“输入对象名就调用对应对象方法”的需求,核心是建立字符串和已实例化对象之间的映射关系,下面给你两种实用的解决方案:
方案1:用HashMap做对象映射(推荐,扩展性好)
这种方式相当于给每个对象起个“别名”,把别名和对象存在一个字典里,输入别名后直接从字典里拿对象就行:
import java.util.HashMap; import java.util.Scanner; public class TestRunner { public static void main(String[] args) { // 先实例化你的三个testClass对象 testClass object1 = new testClass(); testClass object2 = new testClass(); testClass object3 = new testClass(); // 创建映射表:字符串(对象名) -> testClass实例 HashMap<String, testClass> objectLookup = new HashMap<>(); objectLookup.put("Object1", object1); objectLookup.put("Object2", object2); objectLookup.put("Object3", object3); Scanner scanner = new Scanner(System.in); System.out.print("请输入要调用的对象名:"); String inputName = scanner.next(); // 从映射表中获取对应的对象 testClass targetObj = objectLookup.get(inputName); if (targetObj != null) { // 成功找到对象,调用方法 targetObj.testMethod(); } else { System.out.println("错误:不存在名为" + inputName + "的对象!"); } scanner.close(); } }
要点说明:
- 注意输入的字符串要和
put时的键完全一致(Java大小写敏感,比如输入object1和Object1是两个不同的键) - 一定要加非空判断,不然输入不存在的名字时会抛出
NullPointerException
方案2:用switch-case匹配(适合对象数量少的场景)
如果你的对象数量固定且很少,用switch-case也能实现,代码更直观:
import java.util.Scanner; public class TestRunner { public static void main(String[] args) { testClass object1 = new testClass(); testClass object2 = new testClass(); testClass object3 = new testClass(); Scanner scanner = new Scanner(System.in); System.out.print("请输入要调用的对象名:"); String inputName = scanner.next(); testClass targetObj = null; // 根据输入匹配对应的对象 switch(inputName) { case "Object1": targetObj = object1; break; case "Object2": targetObj = object2; break; case "Object3": targetObj = object3; break; default: System.out.println("错误:无效的对象名!"); } if (targetObj != null) { targetObj.testMethod(); } scanner.close(); } }
核心逻辑总结
你不能让Java直接把字符串“变”成对象,必须自己提前把已有的对象和对应的字符串标签绑定好,输入字符串后通过绑定关系找到真实的对象,再调用方法——这是强类型语言里处理这类需求的通用思路。
内容的提问来源于stack exchange,提问作者kssfk
相关产品推荐
相关产品推荐

