解析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对象本身的:

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