java - 在 Java 中将字符串转换为 SomeType

标签 java command-line-arguments string-conversion

我决定用 Java 编写我自己的小型 ArgumentParser, 关键是它有方法

public void addOption(String optionName, Class valueType, boolean required)

做类似的事情

ArgumentParser parser = new ArgumentParser();
parser.addOption("--input_path", String.class, true);
Map<String, Object> options = parser.parse(args);  //args is String[]
String inputPath = (String)options.get("--input_path");  //hooray!

但我不知道如何尝试自动将 String 转换为某个用户指定的类? 下面的代码显然不起作用

options.put(currentOption, registeredOptions.get(currentOption).valueOf(arg));

是否有一些我想不通的简单方法可以做到这一点? 或者你可能会说这是一个坏主意,我很感激任何建议! 谢谢!

最佳答案

您的目标基本上是创建一个函数,该函数将返回一个对象,该对象的类作为参数传递。

我不知道这个问题的通用解决方案。

但是有一些部分解决方案结合在一起,所以我相信,将回答您正在寻找的问题:

A. 返回的对象是一个数字:

对于 int 和 float,解决方案很明显:

int ival = Integer.parseInt(strParam);
float fval = Float.parseFloat(strParam);

B. 返回的对象类有一个字符串构造函数,即接收单个字符串参数的构造函数

即:

parser.addOption("--input_path", MySpecialClass.class, true);

哪里:

class MySpecialClass {
     public MySpecialClass(String param)  // <----------- string constructor
}

在这里您可以使用反射通过获取和激活构造函数来实例化所需的对象。 注意:我们的代码不需要知道返回类标识,但不管天气与否,它都有一个字符串构造函数:

Constructor stringConstructor = classObject.getConstructor(new Class[]{String.class});
Object objectToReturn = stringConstructor.newInstance(stringParam);


最后结合上面给出了一个类似于这样的参数处理函数:

Object processAnyParam(String strParam, Class returnClass, boolean mandatory) {

     if (returnClass.equals(int.class)) {
           return Integer.parseInt(strParam);
     }
     else if (returnClass.equals(float.class)) {
          return Float.parseFloat(strParam);
     }
     else if (maybe other numeric types here...) {
     }
     else {
          try { 
                Constructor stringConstructor = classObject.getConstructor(new Class[]{String.class});
          } catch (NoSuchMethodException  e) {
                // no string constructor; bail out..
                return  null;
          }
          return stringConstructor.newInstance(strParam);
     }


}

关于java - 在 Java 中将字符串转换为 SomeType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716693/

相关文章:

Java "100%"到数字

java - Lob 使用 MySQL 和 jpa 返回 null

Java - LWJGL 屏幕故障

java - 客户端身份验证 (SSL) 直通?

powershell - 用于在 PowerShell 上设置默认 CLI 选项的别名

c++ - UTF-8转UTF-32,预先计算每个 'chars'的个数

java - 将二进制字符串转换为整数时出现 NumberFormatException

java - 表达式语言和 Eclipse 警告 : "items" does not support runtime expressions

php - 运行命令行脚本时设置 PHP 环境变量

Python argparse - 使用子解析器和父解析器时命令未正确解析