如何将String变量解析为Java中的任何数据类型?

Ste*_*han 6 java string reflection parsing object

我想构建一个方法,可以Field通过Java Reflection 将String值转换为给定的对象数据类型.

这是我的代码:

String value = ...;

Class<? extends MyObject> clazz = getClazz();

Field f = clazz.getDeclaredField("fieldName");
boolean fieldIsAccessible = f.isAccessible();
if (!fieldIsAccessible) {
   f.setAccessible(true);
}

f.getType().cast(value);

if (!fieldIsAccessible) {
    f.setAccessible(false);
}
Run Code Online (Sandbox Code Playgroud)

当我在第一次尝试时运行此代码时,我收到此异常java.lang.ClassCastException.

我想转换value成课程java.math.BigDecimal.

我的代码丢失了什么?

编辑: 查看我提出的解决方案.

tib*_*tof 10

你可以使这个工作适用于具有如下字符串构造函数的类: f.getType().getConstructor( String.class ).newInstance( value );


Ste*_*han 0

这是我想出的解决方案:

public static Object parse(String value, Class<?> clazz) throws NotSupportedException {
    String canonClassName = clazz.getCanonicalName();

    if (canonClassName.equalsIgnoreCase("java.math.BigDecimal")) {
        return new BigDecimal(value);
    }

    // Add other supported classes here ...

    throw new NotSupportedException("The class [" + canonClassName  + "] is not supported.");
}
Run Code Online (Sandbox Code Playgroud)