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