0

即使值存储在字符串中,如何使 ConstructorUtils.invokeConstructor 工作?

这是代码:

    public static void main(String[] args) {
    try {
        String type     = "java.lang.Character";
        //char value     = 'c';  //this work
        String value = "c"; // this not work,throws[java.lang.NoSuchMethodException: No such accessible constructor on object: java.lang.Character]
        Class<?> clazz  = ClassUtils.getClass(type);
        Object instance = ConstructorUtils.invokeConstructor(clazz, value);
        System.out.println(instance);
    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException
            | ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

1 回答 1

0

ConstructorUtils.invokeConstructor(clazz, value);此表达式尝试clazz使用参数调用类的构造value

java.lang.Character只有以下接受字符作为参数的构造函数,

public Character(char value) {
    this.value = value;
}

它没有可以接受String参数的构造,因此当您调用 时ConstructorUtils.invokeConstructor(clazz, value);,它会抛出java.lang.NoSuchMethodException并说No such accessible constructor on object: java.lang.Character

要创建 String 类实例,您必须将其应用到java.lang.String. 更改String type = "java.lang.Character";String type = "java.lang.String";

于 2018-07-14T03:21:29.127 回答