天天看點

記一次lombok @Builder 踩坑

發現問題

在實際項目中遇到使用lombok @Builder發生對象屬性值互相調換的情況,百思不得其解。将原代碼重複的構造函數删除,問題解決。

還原現場

  1. 建構User類,使用@Builder注解,main方法使用builder建構對象,列印對象,展示屬性。
記一次lombok @Builder 踩坑
  1. 增加全屬性構造函數,參數清單不按照類屬性聲明順序(name,age順序調換),運作main,發現對象name和age屬性互相調換。
記一次lombok @Builder 踩坑

問題分析

lombok的@Builder​原理是為類生成了一個靜态内部類User.UserBuilder​,當我們為User.UserBuilder​設定屬性完畢後調用build()​方法構造一個新的對象,build()調用了一個自動生成的全參構造器,構造器的參數清單的順序是按照類屬性聲明的順序來的。

記一次lombok @Builder 踩坑

在本案例中出現了一個手動增加的全參構造器,構造器參數順序和類屬性聲明順序不一緻,@Builder​發現已經有了全參構造器就不會再自動生成全參構造器了,否則會編譯報錯。build()​最終調用手寫的全參構造器,導緻對象屬性指派錯亂,讓人覺得很奇怪。。。

這裡建議在使用lombok時不要自己再寫類似setter, getter, 全參構造器的代碼了。

繼續閱讀