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

时间:2018-07-14 03:07:51

标签: apache apache-commons-lang3

如何使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();
    }
}

1 个答案:

答案 0 :(得分: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";