现象
开发中使用实体类创建对象时,报错:
java.lang.InstantiationException: com.bjbde.pay.model.BdModel.BdMemberApiConfig
实例化对象的代码
public static <T> T map2Bean(Map<String, Object> source, Class<T> instance) {
try {
T object = instance.newInstance();
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
FieldName fieldName = field.getAnnotation(FieldName.class);
if (fieldName != null){
field.set(object,source.get(fieldName.value()));
}else {
field.set(object,source.get(field.getName()));
}
}
return object;
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
instance.newInstance();在此处抛出错误,其使用的实体类中没有构造方法。
分析与解决
查找资料发现,在相应实体类中加入无参构造方法可避免该异常发生。
进一步查找资料,发现
Think In Java 第十四章类型信息(318页)中有对该部分使用的说明:
使用newInstance()来创建类,必须带有默认的构造器。
在练习1中还给出了一个这样的例子。
来源:oschina
链接:https://my.oschina.net/yuhuashang/blog/3220778