java - 如何确保我的 Bean 正确构建?

标签 java javabeans builder

我正在使用构建器模式构建一个 JavaBean(仅字段和 getter/setter)。

对于此示例,假设这是我们的 bean:

public class Pizza {
  private int size;
  private boolean cheese;
  private boolean pepperoni;
  private boolean bacon;

  private Pizza(Builder builder) {
    size = builder.size;
    cheese = builder.cheese;
    pepperoni = builder.pepperoni;
    bacon = builder.bacon;
  }

  public static class Builder {
    //required
    private final int size;

    //optional
    private boolean cheese = false;
    private boolean pepperoni = false;
    private boolean bacon = false;

    public Builder(int size) {
      this.size = size;
    }

    public Builder cheese(boolean value) {
      cheese = value;
      return this;
    }

    public Builder pepperoni(boolean value) {
      pepperoni = value;
      return this;
    }

    public Builder bacon(boolean value) {
      bacon = value;
      return this;
    }

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

取自 here .

现在,我一直在尝试确保 Pizza 中的所有字段都不为空,通过反射,迭代 Pizza 的字段并检查它们是否为空't null,但看起来(我在这里可能是错的)我的字段在检查发生之前没有设置。 This code作者:Jon Skeet 是我为了检查字段的非空性而进行的修改(我不是计数,而是抛出异常)。

然后,我尝试检查构建器的字段,但构建器中有额外的字段(例如,我有一个可能为空的 XMLParser 字段)。用披萨字段子集构建器字段不起作用,因为它们具有不同的“包路径”(?),例如org.GiusepesPizzaria.pizza.size vs org.GiusepesPizzaria.builder.size

有更好的方法来检查吗?在实现反射方法之前,我使用了这种构造:

if(builder.size ==null){
    throw new BadPizzaException("Eh, what're ya doin'?"+
             " Pizza Size was not set correctly");
}else{
    size=builder.size;
}

但是,如果您有大约 10 个字段需要检查,那么最终的结果是,冗长且困惑,本来应该是一个简单的类。

这就是我尝试过的。有更好的方法吗?

最佳答案

确保设置所有变量的一个有趣模式是使用 Step Builder Pattern其中第一个 setter 仅允许您设置第二个 setter ,第二个 setter 仅允许设置第三个 setter ,依此类推。当您进行到最后一步时,您可以构建该类,然后您就会知道所有方法都已被调用。

该帖子的简短摘录:

Panino solePanino = PaninoStepBuilder.newBuilder()
        .paninoCalled("sole panino")
        .breadType("baguette")
        .fish("sole")
        .addVegetable("tomato")
        .addVegetable("lettece")
        .noMoreVegetablesPlease()
        .build();

您必须从帕尼诺的名称开始,然后是面包类型。

关于java - 如何确保我的 Bean 正确构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564133/

相关文章:

java - 如何平移和缩放 JComponents?

java - 在 Spring Boot 中加密应用程序属性

java - JavaFX 尝试创建新对话框并将其中的进度条绑定(bind)到工作线程时出现错误

java - SpringMvc java.lang.NullPointerException - 配置是否正确

java - 使用timer.schedule重复一个方法

java - Elasticsearch 按多个字段进行分组并对小时数求和(聚合)

java - 实体管理器不持久化类实例

java - 如何使用 Immutables 和 Egg 模式设置基类字段

java - 禁用阶段按钮 X

flutter - 如何在 flutter 的Listview中显示字符串列表