所謂鏈式編程,即:方法可鏈式調用,方法調用完後返回對象本身,然後又可以繼續調用該對象的方法。
常用的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
對象本身的: