我想编写通用代码来解析用户输入并将其与类数组进行比较,然后相应地投射输入。即:从BufferedReader(InputReader)输入解析Integer.class
- 对象[] paramTypes = {String.class,String.class,Integer.class}
- 对象[] userInput = { “playerName1”, “targetPlayerName”, “5”} // 5是字符串
- 用户输入的每个字符串都转换为paramTypes中的相应类。
最后,将转换的单词放入另一个Object [] castedUserInput中供以后使用。
for(int i = 0; i<userInput.length; i++) castedUserInput[i] = paramTypes[i].cast(userInput[i]);
只要paramTypes [i]是Integer.class并且执行投,一个ClassCastException发生。该异常的文档读取:
ClassCastException异常:抛出,表明代码已经试图对象转换子类,它是不是一个实例
所以,既不(对象)“5” (为什么这不起作用?)也不能将“5”转换为Number的子类。
现在我明白,数字和字符串都是对象的子类,但除此之外彼此不相关。我正在安装JDK7来查看的源代码和ClassCastException,但我怀疑这对于我只编程了大约一年并且缺乏对什么java编译器和虚拟机正在这里做着。
任何人都可以帮助我吗? PS:当然可以使用几个if子句,然后使用Integer.parseInt(userInput [i]),Long.parseLong(userInput [i])等,但这不可能是最有效的解决方案,对?
没有调用解析功能,是如何知道如何改变一个任意字符串为整数计算机?从编译器的角度来看,它无法区分“4”和“一些随机字符串”。 (虽然显然你不能将后者转换为int) – 2013-04-28 21:32:02
将对象转换为另一种类型决不会改变对象的类型。它所做的只是允许你引用另一个类型的对象,当且仅当它真的具有这种类型。一个字符串是一个字符串,一个CharSequence,一个Serializable,一个COmprable和一个对象,但它不是一个整数。 – 2013-04-28 21:34:55