java - 基于条件的 lombok 对象构建

标签 java dropwizard builder lombok

所以这是为构建Human而编写的现有代码片段(如 matrix 电影 :))

if (gender.equals("male")){
    return Human.builder()
        .gender('male')
        .name('abc')
        .speaks("english")
        .alive(true)
        .build();
}else{
    return Human.builder()
        .gender('female')
        .name('abcd')
        .speaks("english")
        .alive(true)
        .build();    
}

如果您仔细观察,这段代码在属性分配方面有很多冗余,可以将其最小化。现在想象 10 个类似的条件(这里,只有 2 个!),无论您尝试什么,它最终都会导致看起来丑陋的冗余代码。

我尝试在线搜索大量资源,但找不到任何方法将对象构建为 per builder design .我想在这里实现的(减少代码冗余)如下所示:

Human human = Human.builder()
            .speaks("english")
            .alive(true);

if (gender.equals("male")){
        human = human    // or just human.gender('male').name('abc'); no assignment
        .gender('male')
        .name('abc');
}else{
        human = human // or just human.gender('female').name('abcd'); no assignment
        .gender('female')
        .name('abcd');
}            
return human.build();

是否可以通过 lombok 或任何人知道在这里构建对象的更好方法?
如果值得,我在 drop-wizard

最佳答案

使用 Lombok 的生成器:

import lombok.Builder;
import lombok.ToString;

@Builder
@ToString
public class Human {
    private String name;
    private String gender;
    private String speaks;
    private boolean alive;


    public static void main(String[] args) {
        HumanBuilder humanBuilder = Human.builder();

        String gender = "female";


        humanBuilder
                .speaks("english")
                .alive(true);

        if("male".equals(gender)){
            humanBuilder
                    .gender("male")
                    .name("abc");
        }else{
            humanBuilder
                    .gender("female")
                    .name("abcd");
        }

        Human human = humanBuilder.build();
        System.out.println(human);
    }
}

结果:

Human(name=abcd, gender=female, speaks=english, alive=true)

关于java - 基于条件的 lombok 对象构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48520316/

相关文章:

java - 如何将类作为函数参数传递

JAVA_HOME 没有指向 JDK : Unable to start google app engine

google-compute-engine - 如何修复服务器和网站的跨站点源策略

java - 无法使用 Dropwizard 测试安全资源

ruby - 类型错误:无法将 Builder::XmlMarkup 转换为数组

ios - 告诉 Interface Builder 有关自定义对象的信息。 Xcode 4.0.2

java - 将鼠标事件转发到 java 中的隐藏面板

java - Java 方法 "Arrays.deepToString()"是打印二维数组最有效的方法吗?

java - hibernate 与 JDBI

Java 中断构建器模式