解析Java鏈式編程以及Lombok對鏈式編程的支持

所謂鏈式編程,即:方法可鏈式調用,方法調用完後返回對象本身,然後又可以繼續調用該對象的方法。

常用的StringBuffer就是鏈式編程的例子:

StringBuffer str = new StringBuffer();
str.append("a").append("b").append("c").append("d").append("e");
// 結果:abcde

假設在實際開發中有這樣一個User類(這是一個最簡單的JavaBean):

public class User {
    
    private int userId;
    private String userName;

    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}

如果要新建一個對象,給屬性設值,常規的寫法是:

User u = new User();
u.setUserId(123456);
u.setUserName("張三");
// ...

如果使用鏈式編程方式,需要先修改Setter方法,return this

public class User {

    private int userId;
    private String userName;

    public int getUserId() {
        return userId;
    }
    public User setUserId(int userId) {
        this.userId = userId;
        return this;
    }
    public String getUserName() {
        return userName;
    }
    public User setUserName(String userName) {
        this.userName = userName;
        return this;
    }

}

同樣給屬性設值,則可以這樣寫:

User u = new User();
u.setUserId(123456).setUserName("張三");

是不是感覺代碼簡潔不少?可在需要重複調用Setter方法的類上可以改成這種方式。

Lombok對鏈式編程的支持

這種場景Lombok也想到了,只需要在類上加上註解@Accessors(chain = true),這個類生成的Setter方法就是支持鏈式調用的了:

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Accessors(chain = true) // Lombok鏈式編程
public class User {

    @Getter
    @Setter
    private int userId;
    
    @Getter
    @Setter
    private String userName;
}

可以看出編譯後生成的Setter方法是有返回User對象本身的:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章