拆分Java构建器以避免多次编写相同的代码

时间:2017-03-18 05:00:40

标签: java builder

我有一段代码如下所示:

Problem hashProblem;
String indexName;
if(condition.getOwner() != null) {
    indexName = sourceLocation ;
    hashProblem = new Problem().builder()
        .locationID(condition.getLocationID())
        .sourceLocation(condition.getSourceLocation())
        .build();
}
else {
    indexName = currentLocation;
    hashProblem = new Problem().builder()
        .locationID(condition.getLocationID())
        .currentLocation(criteria.getcurrentLocation())
        .build();
}

有没有办法以更优雅的方式编写此代码?在构建hashProblem对象时,始终需要locationID。我无法想出一种分割构建器的方法,这样我只能编写.locationID一次。我使用Lombok(https://projectlombok.org/features/Builder.html)作为构建器

1 个答案:

答案 0 :(得分:3)

不确定。构建器就像其他任何对象一样。您可以保存对构建器的引用,有条件地执行某些操作,然后调用build()

,而不是在一个大语句中创建构建器并调用build()
Problem hashProblem;
String indexName;
Builder builder = new Problem().builder().locationID(condition.getLocationID());
if(condition.getOwner() != null) {
    indexName = sourceLocation ;
    builder.sourceLocation(condition.getSourceLocation())
}
else {
    indexName = currentLocation;
    builder.currentLocation(criteria.getcurrentLocation())
}
hashProblem = builder.build();

顺便说一下,new Problem().builder()在命名约定方面看起来有点奇怪。通常,您会看到new Problem.Builder(),其中BuilderProblem的嵌套类,或Problem.builder()(无new)其中builder()是静态的返回Problem.Builder

的方法