Java对象实例化报错:java.lang.InstantiationException: com.bjbde.pay.model.BdModel.BdMemberApiConfig

三世轮回 提交于 2020-04-06 06:48:24

现象

开发中使用实体类创建对象时,报错:

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中还给出了一个这样的例子。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!