Java链式方法调用


经常会看到一些代码使用连续的.set()方法来进行初始化,这种实现方式是链式方法调用。

传统方式

通常,我们在进行对象初始化的时候,可以调用.set()方法对某个属性进行赋值,例如:

public class FixedDepositDetails {
    private long id;
    private float depositAmount;
    private int tenure;
    private String email;
    
    public FixedDepositDetails() {
    }

    public FixedDepositDetails(long id, float depositAmount, int tenure, String email) {
        this.id = id;
        this.depositAmount = depositAmount;
        this.tenure = tenure;
        this.email = email;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public float getDepositAmount() {
        return depositAmount;
    }

    public void setDepositAmount(float depositAmount) {
        this.depositAmount = depositAmount;
    }

    public int getTenure() {
        return tenure;
    }

    public void setTenure(int tenure) {
        this.tenure = tenure;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "FixedDepositDetails{" +
                "id=" + id +
                ", depositAmount=" + depositAmount +
                ", tenure=" + tenure +
                ", email='" + email + '\'' +
                '}';
    }
}

使用方式也是传统的方法,例如:

import org.junit.Test;

public class FixedDepositDetailsTest {
    @Test
    public void testObjectCreate() {
        FixedDepositDetails fixedDepositDetails = new FixedDepositDetails();
        fixedDepositDetails.setId(1L);
        fixedDepositDetails.setDepositAmount(1000);
        fixedDepositDetails.setEmail("someone@somedomain.com");
        fixedDepositDetails.setTenure(100);
        System.out.println(fixedDepositDetails);
    }
}

没有什么特别的,这是大家都熟悉的模式。

链式方法

现在,来看一下,链式调用,其代码如下:

import org.junit.Test;

public class FixedDepositDetailsTest {
    @Test
    public void testObjectCreate() {
        FixedDepositDetails fixedDepositDetails = new FixedDepositDetails();
        fixedDepositDetails.setId(1L)
        	.setDepositAmount(1000)
        	.setEmail("someone@somedomain.com")
        	.setTenure(100);
        System.out.println(fixedDepositDetails);
    }
}

是不是和前面创建对象的方式有很大不同。
要实现链式方法调用,其实很简单,就是让每个set方法,返回自己即可,也很容易实现,例如:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class FixedDepositDetails {
    private static Logger logger = LoggerFactory.getLogger(FixedDepositDetails.class);
    private long id;
    private float depositAmount;
    private int tenure;
    private String email;

    public FixedDepositDetails() {
        logger.info("Created instance");
    }

    public long getId() {
        return id;
    }

    public FixedDepositDetails setId(long id) {
        this.id = id;
        return this;
    }

    public float getDepositAmount() {
        return depositAmount;
    }

    public FixedDepositDetails setDepositAmount(float depositAmount) {
        this.depositAmount = depositAmount;
        return this;
    }

    public int getTenure() {
        return tenure;
    }

    public FixedDepositDetails setTenure(int tenure) {
        this.tenure = tenure;
        return this;
    }

    public String getEmail() {
        return email;
    }

    public FixedDepositDetails setEmail(String email) {
        this.email = email;
        return this;
    }

    public String toString() {
        return "id :" + id + ", deposit amount : " + depositAmount
                + ", tenure : " + tenure + ", email : " + email;
    }
}

idea自动生成

可以使用idea环境,自动生成返回this的set方法,选择Setter template:Builder即可生成想要的set方法,如下图所示:
idea生成setter方法
当然,不管哪种方式,都是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值