美文网首页
BeanUtils.copyProperties() 造成的

BeanUtils.copyProperties() 造成的

作者: Aries_Li | 来源:发表于2020-10-20 16:23 被阅读0次

    平常开发的时候,经常会使用BeanUtils.copyProperties()进行对象的拷贝,今天在项目中使用的时候出现了java.lang.classcastexception,发现是因为对象中的泛型导致的,只能进行基本类型的拷贝。

    代码示例

    @Data
    public class A {
        private String name;
    }
    
    @Data
    public class B {
        private String name;
    }
    
    @Data
    public class BeanA {
        List<A> a;
    }
    
    @Data
    public class BeanB {
        List<B> a;
    }
    
     public static void main(String[] args) {
            BeanA beanA = new BeanA();
            List<A> aList = new ArrayList<>();
            A a = new A();
            a.setName("测试名称");
            aList.add(a);
            beanA.setA(aList);
            BeanB beanB = new BeanB();
            BeanUtils.copyProperties(beanA, beanB);
            log.info(beanB.getA().get(0).getName());
        }
    

    当进行beanB.getA().get(0).getName() 调用的时候,会报错:

    Exception in thread "main" java.lang.ClassCastException: com.example.demo.A cannot be cast to com.example.demo.B
        at com.example.demo.Test.main(Test.java:28)
    

    解决方法

    解决上面的方法有两种,一种是将对象取出后,然后重新set封装进行复制,这样一般适合参数较少的时候。另外一种就是使用fastjson进行转换。

    //使用fastjson进行转换
    public static void main(String[] args) {
            BeanA beanA = new BeanA();
            List<A> aList = new ArrayList<>();
            A a = new A();
            a.setName("测试名称");
            aList.add(a);
            beanA.setA(aList);
            String jsonStr = JSON.toJSONString(beanA);
            BeanB beanB = JSON.parseObject(jsonStr,BeanB.class);
            log.info(beanB.getA().get(0).getName());
        }
    

    通过上面的方法就能避免java.lang.classcastexception的错误了。

    相关文章

      网友评论

          本文标题:BeanUtils.copyProperties() 造成的

          本文链接:https://www.haomeiwen.com/subject/numdmktx.html