我想编写通用代码来解析用户输入并将其与类数组进行比较,然后相应地转换输入。IE:
- 对象[] paramTypes = { String.class, String.class, Integer.class }
- Object[ ] userInput = { "playerName1", "targetPlayerName", "5" } //5 是一个字符串
- 用户输入的每个 String 都被强制转换为 paramTypes 中的相应类。
最后,转换后的词被放入另一个 Object[ ] castedUserInput 供以后使用。
for(int i = 0; i<userInput.length; i++) castedUserInput[i] = paramTypes[i].cast(userInput[i]);
一旦 paramTypes[i] 为 Integer.class 并且执行了强制转换,就会发生 ClassCastException。该异常的文档内容如下:
ClassCastException:抛出以指示代码已尝试将对象强制转换为它不是实例的子类
因此,(Object)"5"(为什么这不起作用?)和 "5" 都不能转换为 Number 的子类。
现在我明白 Number 和 String 都是 object 的子类,但除此之外彼此不相关。我正在安装 JDK7 以查看Number和ClassCastException的源代码,但我怀疑这对了解我只编程了大约一年并且对 java 编译器和虚拟的内容缺乏透彻理解会有很大帮助机器正是在这里做的。
有人可以帮我吗?
PS:当然可以使用一些 if 子句,然后使用 Integer.parseInt(userInput[i])、Long.parseLong(userInput[i]) 等,但这不是最有效的解决方案,对吧?