BeanUtils、PropertiesUtils、BeanCopier copyProperties 出现ClassCastException

复制属性值,如果复制的实体对象中有list,在使用list的时候,如果list中的泛型是不一样的,就会出现类转化失败 java.lang.ClassCastException: com.an.copy.Person cannot be cast to com.an.copy.User

public class Person {
    private String name;
    private Integer age;
    private String agender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAgender() {
        return agender;
    }

    public void setAgender(String agender) {
        this.agender = agender;
    }
}
public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
public class CompanyGrope {
    private List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}
public class SocialGroupe {
    private List<Person> users;

    public List<Person> getUsers() {
        return users;
    }

    public void setUsers(List<Person> users) {
        this.users = users;
    }
}
public class Demo {

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
        List<Person> list = initData();
        CompanyGrope companyGrope = new CompanyGrope();
        SocialGroupe socialGroupe = new SocialGroupe();
        socialGroupe.setUsers(list);
//        BeanCopier beanCopier = BeanCopier.create(SocialGroupe.class, CompanyGrope.class, Boolean.FALSE);
//        beanCopier.copy(socialGroupe,companyGrope,null);
        copyProperties(companyGrope,socialGroupe);
//        PropertyUtils.copyProperties(companyGrope,socialGroupe);
        List<User> users = companyGrope.getUsers();
        users.stream().forEach(s->{
            System.out.println(s.getAge()+":"+s.getName()+":");
        });

//        System.out.println(JSON.toJSONString(companyGrope));

    }

    public static List<Person> initData(){
        List<Person> list = new ArrayList<>();
        {
            Person person = new Person();
            person.setAge(12);
            person.setAgender("男");
            person.setName("李四");
            list.add(person);
        }
        {
            Person person = new Person();
            person.setAge(14);
            person.setAgender("男1");
            person.setName("李四2");
            list.add(person);
        }
        {
            Person person = new Person();
            person.setAge(123);
            person.setAgender("男3");
            person.setName("李四4");
            list.add(person);
        }
        return list;
    }

}

CompanyGroupe 中有一个属性 users ,SocialGroupe 中也有一个属性 users ,BeanUtils,prpertiesUtil,BeanCopier都是只能copy基本数据类型,因为两个类中的属性名称是一样的,所以,将socialGroupe中的users复制给了companyGroupe的users,这个时候,打印companyGroupe的参数,你会发现,结果是:{“users”:[{“age”:12,“agender”:“男”,“name”:“李四”},{“age”:14,“agender”:“男1”,“name”:“李四2”},{“age”:123,“agender”:“男3”,“name”:“李四4”}]} 但是User中没有gender参数, 将companyGroupe中的users取出,遍历取值,就会出现类型转化失败

这个原因,就是上面说的,以上三种属性复制的工具类,只是对基本数据类型的复制,,list不是基本数据类型,所以,这个时候你可以看做是list 就是String, 复制的时候并没有将值转化成目标类之后的泛型 在调用companyGroupe中的list,遍历的时候才会进行类型转化,这个时候就会出现转化失败
所以,如果不是基本数据类型,在复制属性的时候,就需要循环复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值