乙個由copyBean引發的血案

2022-09-13 16:39:11 字數 2206 閱讀 8997

一次開發中使用輪子bean互轉突然發生了問題

***** ***** = new *****();

*****.setdlevel(1);

*****dto dto = new *****dto();

dto = beancopyutils.copybean(*****, *****dto.class);

system.out.println(dto.getdlevel());

列印出輸出結果:

輸出結果卻變成null,怎麼肥事呢

通過對比發現這個欄位被忽略掉了,別的欄位都能成功的被轉換,你這麼這麼傲嬌呢?仔細檢視這個字段自動生成的get、set方法

public integer getdlevel() 

public void setdlevel(integer dlevel)

發現set、get後生成的是小寫,而dto的get、set用的是@data註解,這裡就順便介紹下@data註解:

這個註解來自於 lombok,lombok 能夠減少大量的模板**,減少了在使用@data 註解時, 需要匯入lombok.data,下面列舉下 lombok提供的註解:

val : 和 scala 中 val 同名, 可以在執行時確定型別;

@nonnull : 註解在引數上, 如果該類引數為 null , 就會報出異常, 

throw new nullpointexception(引數名)

@cleanup : 注釋在引用變數前, 自動**資源 預設呼叫

close() 方法

@getter/@setter : 註解在類上, 為類提供讀寫屬性

@getter(lazy=true) :

@tostring : 註解在類上, 為類提供 tostring() 方法

@equalsandhashcode : 註解在類上, 為類提供 equals() 和

hashcode() 方法

@noargsconstructor, @requiredargsconstructor,

@allargsconstructor : 註解在類上, 為類提供無參,

有指定必須引數,全參建構函式

@data : 註解在類上, 為類提供讀寫屬性, 此外還提供了

equals()、hashcode()、tostring() 方法

@value :

@builder : 註解在類上, 為類提供乙個內部的 builder

@sneakthrows :

@synchronized : 註解在方法上, 為方法提供同步鎖

@log :

@log4j : 註解在類上, 為類提供乙個屬性名為 log 的

log4j 的日誌物件

@slf4j : 註解在類上, 為類提供乙個屬性名為 log 的

log4j 的日誌物件

@cleanup("dispose") org.eclipse.swt.widgets.coolbar bar =

new coolbar(parent, 0);

@cleanup inputstream in = new fileinputstream(args[0]);

@cleanup outputstream out = new fileoutputstream(args[1]);

上面一些註解是由包含關係的, 看需要什麼方法就增加什麼註解,@log4j 和 @slf4j 註解作用不小, 用在各層都可以,方便打 log。

簡易例子:[ 只是用了@data註解 ]

public @data class student
當然放在類的上面也是ok的啦

好了言歸正傳,發生了這種情況後,我們來看下@data和自動生成的get、set會怎麼辯解呢

@data:這個鍋我肯定不背。

自動生成:我比@data早出來混了這麼多年,這個鍋我也不背。

既然他們都不背,那我們就統一get、set用@data生成就可以避免這種情況的再次發生。另外使用spring的工具是可以忽略大寫小的哦。附上他們的處理:

spring:

beanutils.copyproperties(*****, dto);
輪子:

乙個由鬥地主引發的血案

王炸 看到這個小故事我也試著拿筆去算了算,唉,尼瑪,去試一下自己的智商下限 然後得出如下思路 地主20,農民17,一共54張牌.那我直接用 20 54 地主拿一張王牌的概率 19 53 地主在有一張王后再拿到王的概率 然後兩個概率相乘 20 54 19 53不就得出了王炸的概率嘛?13.3 在確定王...

由乙個typedef問題引發的思考

同樣,可以像下面這樣隱藏指標語法 typedef char pstr intmystrcmp const pstr p1,const pstr p3 用gnu的gcc和g 編譯器,是會出現警告的,按照順序,const pstr 被解釋為 char const 乙個指向char的指標常量 而事實上,c...

由乙個DAOHelper類引發的思考

這是一篇發牢騷的文章,可以這麼說吧。daohelper究竟有什麼用呢?用我自己的話去理解,daohelper的存在正是敏捷開發的產物,即快速開發。我們究竟能從專案中學到什麼呢?有的人可能會說,從乙個專案中,你可以學到很多東西,比如你可以學習nhibinate,entity framework 等or...