為什么不推薦使用BeanUtils屬性轉(zhuǎn)換工具
點(diǎn)擊上方“碼農(nóng)突圍”,馬上關(guān)注
這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包 真愛,請(qǐng)?jiān)O(shè)置“星標(biāo)”或點(diǎn)個(gè)“在看

1 背景
2 示例
import?lombok.Data;
import?java.util.List;
@Data
public?class?A?{
????private?String?name;
????private?List?ids;
}
@Data
public?class?B?{
????private?String?name;
????private?List?ids;
}
import?org.springframework.beans.BeanUtils;
import?java.util.Arrays;
public?class?BeanUtilDemo?{
????public?static?void?main(String[]?args)?{
????????A?first?=?new?A();
????????first.setName("demo");
????????first.setIds(Arrays.asList(1,?2,?3));
????????B?second?=?new?B();
????????BeanUtils.copyProperties(first,?second);
????????for?(String?each?:?second.getIds())?{//?類型轉(zhuǎn)換異常
????????????System.out.println(each);
????????}
????}
}

import?org.easymock.cglib.beans.BeanCopier;
import?java.util.Arrays;
public?class?BeanUtilDemo?{
????public?static?void?main(String[]?args)?{
????????A?first?=?new?A();
????????first.setName("demo");
????????first.setIds(Arrays.asList(1,?2,?3));
????????B?second?=?new?B();
????????final?BeanCopier?beanCopier?=?BeanCopier.create(A.class,?B.class,?false);
????????beanCopier.copy(first,second,null);
????????for?(String?each?:?second.getIds())?{//?類型轉(zhuǎn)換異常
????????????System.out.println(each);
????????}
????}
}
import?org.mapstruct.Mapper;
import?org.mapstruct.factory.Mappers;
@Mapper
public?interface?Converter?{
????Converter?INSTANCE?=?Mappers.getMapper(Converter.class);
????B?aToB(A?car);
}
import?java.util.Arrays;
public?class?BeanUtilDemo?{
????public?static?void?main(String[]?args)?{
????????A?first?=?new?A();
????????first.setName("demo");
????????first.setIds(Arrays.asList(1,?2,?3));
????????B?second?=?Converter.INSTANCE.aToB(first);
????????for?(String?each?:?second.getIds())?{//?正常
????????????System.out.println(each);
????????}
????}
}
List 轉(zhuǎn)為 B 中的 List 類型。import?java.util.ArrayList;
import?java.util.List;
import?javax.annotation.Generated;
import?org.springframework.stereotype.Component;
@Generated(
????value?=?"org.mapstruct.ap.MappingProcessor",
????comments?=?"version:?1.3.1.Final,?compiler:?javac,?environment:?Java?1.8.0_202?(Oracle?Corporation)"
)
@Component
public?class?ConverterImpl?implements?Converter?{
????@Override
????public?B?aToB(A?car)?{
????????if?(?car?==?null?)?{
????????????return?null;
????????}
????????B?b?=?new?B();
????????b.setName(?car.getName()?);
????????b.setIds(?integerListToStringList(?car.getIds()?)?);
????????return?b;
????}
????protected?List?integerListToStringList(List {?list) ?
????????if?(?list?==?null?)?{
????????????return?null;
????????}
????????List?list1?=?new?ArrayList (?list.size()?);
????????for?(?Integer?integer?:?list?)?{
????????????list1.add(?String.valueOf(?integer?)?);
????????}
????????return?list1;
????}
}
.NumberFormatException。@Override
public?B?aToB(A?car)?{
????if?(?car?==?null?)?{
????????return?null;
????}
????B?b?=?new?B();
????b.setName(?car.getName()?);
????if?(?car.getNumber()?!=?null?)?{?//?問題出在這里
????????b.setNumber(?Long.parseLong(?car.getNumber()?)?);
????}
????b.setIds(?integerListToStringList(?car.getIds()?)?);
????return?b;
}
public?final?class?A2BConverter?{
????public?static?B?from(A?first)?{
????????B?b?=?new?B();
????????b.setName(first.getName());
????????b.setIds(first.getIds());
????????return?b;
????}
}

3 結(jié)論
List 和 List 都是 List 類型,可以正常賦值。這就導(dǎo)致在使用很多屬性映射工具時(shí),編譯時(shí)不容易明顯的錯(cuò)誤。
-?END - 最近熱文
? ?瘋了!成千上萬網(wǎng)友正自爆公司薪資待遇!!! ? ?985大學(xué)最美小姐姐,堪稱今年最強(qiáng)博士后... ? ?0.2秒居然復(fù)制了100G文件? ? ?某科技公司領(lǐng)導(dǎo)稱80后該退出IT行業(yè),網(wǎng)友炸了!
評(píng)論
圖片
表情
