在項目開發中,咱們常常須要構建對象。常見的作法有getter/setter,或者構造器構建對象。
可能會有人寫出相似以下的代碼:dom
Company company=new Company(); company.setAgentId(agentId); company.setAgentUserId(agentUserId); company.setCompanyName( companyName ); company.setAgentUserName(agentUserName); company.setDomain( domain ); company.setTaxNo( taxNo ); company.setCreateTime( new Date() ); company.setIsauth(1); company.setActivationCode(activationCode); company.setAuthCode(authCode); company.setDomain(domain); company.setUseType(1); company.setContactor(phoneNumber);
也可能寫了一個參數很是冗長,傳參特別容易出錯的構造方法。ui
咱們能夠使用Lombok和建造者模式簡化代碼。
(注意,Lombok除了要加入依賴包,還須要配置一下。幾分鐘能夠搞定,具體作法請百度。)
若是你的同事不喜歡用Lombok,或者你想了解一下Lombok註解所表示的代碼塊,你能夠在安裝插件後,經過選擇IDEA導航欄的"Refactor"---"Delombok"將Lombok註解逆向生成代碼。
首先,在Company類上方加入Lombok註解,以下所示:this
@Data @Builder @AllArgsConstructor @NoArgsConstructor @RequiredArgsConstructor(staticName = "getCompany") public class Company { private Integer agentUserId; @NonNull private Integer agentId; private String companyName; private String agentUserName; private String domain; private String taxNo; private Date createTime; private Integer isAuth; private String activationCode; private String authCode; private Integer userType; private String phoneNumber; }
其中的註釋意思以下:google
@Builder:可經過Builder模式構建對象。 @NonNull:變量不能爲空 @Data:包含了getter、setter、toString、equals、hashcode方法。 @NoArgsConstructor : 生成一個無參數的構造方法。 @AllArgsContructor: 會生成一個包含全部變量的構造方法。 @RequiredArgsConstructor: 會生成一個包含常量,和標識了NotNull的變量 的構造方法。 @RequiredArgsConstructor(staticName = "getCompany"):生成的構造方法是private,外部能夠使用static方法訪問。
若是不理解,咱們能夠選擇IDEA導航欄的"Refactor"---"Delombok"逆向生成代碼。
只加註解@RequiredArgsConstructor表示的代碼以下,因爲只有變量agentId爲@NonNull,因此構造方法只有這個變量:插件
public Company(Integer agentId) { this.agentId = agentId; }
使用註解@RequiredArgsConstructor(staticName = "getCompany")表示的代碼以下:code
private Company() { } public static Company getCompany() { return new Company(); }
加入了@Builder後,那麼能夠將代碼改寫成以下:對象
Company company=Company.builder().agentId(1).agentUserId(1).companyName("google") .agentUserName("lin").domain("test").taxNo("1111111").createTime(new Date()) .isAuth(1).activationCode("0587-1235").userType(1).phoneNumber("666666666") .build();
基本形式就是: 類名.builder().build() ,在中間加入變量方法及變量的具體值。
經過這種方式構建對象,沒有那麼多的setter,參數也不容易出錯。開發
參考資料:
http://kriszhang.com/lombok/get