gpt4 book ai didi

java - 从 BufferedReader(InputReader) 输入中解析 Integer.class

转载 作者:行者123 更新时间:2023-12-02 07:04:26 26 4
gpt4 key购买 nike

我想编写通用代码来解析用户输入并将其与类数组进行比较,然后相应地转换输入。即:

  1. Object[] paramTypes = { String.class, String.class, Integer.class }
  2. Object[ ] userInput = { "playerName1", "targetPlayerName", "5"} //5 是一个字符串
  3. 用户输入的每个字符串都会转换为 paramTypes 中相应的类。
  4. 最后,将转换后的单词放入另一个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 来查看 NumberClassCastException 的源代码,但我怀疑这对了解我如何进行编程有很大帮​​助大约一年了,对 java 编译器和虚拟机到底在做什么缺乏透彻的了解。

有人可以帮帮我吗?

PS:当然可以使用一些 if 子句,然后使用 Integer.parseInt(userInput[i])、Long.parseLong(userInput[i]) 等,但这不可能是最有效的解决方案,对吧?

最佳答案

正如您所描述的那样,您会得到类转换异常,因为输入的类型为 String,并且 String 无法转换为 Integer >。您应该考虑将输入转换为预期的参数类型,而不是进行强制转换。有一些用于此目的的框架,但如果您只有有限数量的可能类型,您可以自己编写一些框架。 Integer/Long.parseInt 将是一种解决方案。

关于java - 从 BufferedReader(InputReader) 输入中解析 Integer.class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com