日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

java – lombok – 多個(gè)鏡頭中的@Builder模式

 印度阿三17 2019-07-17

我使用lombok project的@Builder,所以請(qǐng)考慮我有這個(gè)例子:

@Builder
public class Client {

    private @Getter @Setter Integer id;
    private @Getter @Setter String name;

}

這相當(dāng)于:

public class Client {

    private @Getter @Setter Integer id;
    private @Getter @Setter String name;

    public static class Builder {

        private Integer id;
        private String name;

        private Builder() {
        }

        public Builder id(final Integer value) {
            this.id = value;
            return this;
        }

        public Builder name(final String value) {
            this.name = value;
            return this;
        }

        public Client build() {
            return new Client(this);
        }
    }

    public static Client.Builder builder() {
        return new Client.Builder();
    }

    private Client(final Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
    }
}

當(dāng)我嘗試一次性設(shè)置所有字段時(shí)沒有問題:

public static void main(String[] args) {
    Client client = Client.builder()
            .id(123)
            .name("name")
            .build();
}

輸出:

Client{id=123, name=name}

現(xiàn)在,考慮我想要多次拍攝.例如:

public static void main(String[] args) {
    Client client = Client.builder()
            .id(123)//<-------------------------- Set just the id
            .build();

    client = Client.builder()
            .name("name")//<--------------------- Set name
            .build();

}

這在邏輯上為id返回null:

Client{id=null, name=name}

通常,沒有l(wèi)ombok,我通過在Builder類中添加一個(gè)新的構(gòu)造函數(shù)來解決這個(gè)問題,該構(gòu)造函數(shù)采用相同的對(duì)象:

public static class Builder {
    // ...
    public Builder(Client client) {
        this.id = client.id;
        this.name = client.name;
    }
    // ...
}

然后我將我的對(duì)象傳遞給該構(gòu)造函數(shù):

Client client = Client.builder()
        .id(123)
        .build();

client = new Client.Builder(client)//<---------------- Like this 
        .name("name")
        .build();

這解決了我的問題,但我不能用lombok來解決它.有什么方法可以解決這個(gè)問題嗎?

解決方法:

您可以使用toBuilder屬性來執(zhí)行此操作.

@Builder(toBuilder=true)
public class Client {
    private @Getter @Setter Integer id;
    private @Getter @Setter String name;
}

然后你可以這樣使用它

public void main(String[] args){
    Client client = Client.builder()
        .id(123)
        .build();

    client = client.toBuilder()
        .name("name")
        .build();
}
來源:https://www./content-1-335051.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多