BeanUtils.copyProperties() 造成的 java.lang.classcastexception 記錄

平常開發(fā)的時候,經(jīng)常會使用BeanUtils.copyProperties()進行對象的拷貝,今天在項目中使用的時候出現(xiàn)了java.lang.classcastexception,發(fā)現(xiàn)是因為對象中的泛型導(dǎo)致的,只能進行基本類型的拷貝。

代碼示例

@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() 調(diào)用的時候,會報錯:

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封裝進行復(fù)制,這樣一般適合參數(shù)較少的時候。另外一種就是使用fastjson進行轉(zhuǎn)換。

//使用fastjson進行轉(zhuǎn)換
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的錯誤了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容