gpt4 book ai didi

java - Joshua Bloch 的 Builder 模式和 PMD 警告

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:15 26 4
gpt4 key购买 nike

我已经使用 Joshua Bloch 的 Builder 模式编写了一个类,类似于这个 Pizza 示例:

public class Pizza {
private int size;
private boolean cheese;
private boolean pepperoni;
private boolean 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);
}
}

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

但是 PMD 报告了 2 个警告:

  1. (指向方法 Builder.build())避免通过外部的私有(private)构造函数进行实例化构造函数的类。通过私有(private)实例化来自外部的构造函数构造函数的类通常会导致访问器的生成。一个工厂方法,或非私有(private)化的构造函数可以消除这个情况。生成的类文件实际上是一个接口(interface)。它给访问类的能力调用一个新的隐藏包范围采用接口(interface)的构造函数作为补充参数。这个变成私有(private)构造函数有效地与包合二为一范围,并且具有挑战性辨别。
  2. 类不能被实例化并且不提供任何静态方法或字段。一个有私有(private)的类构造函数,并且没有任何静态方法或字段不能用过。

我应该忽略这些警告吗?

另一个问题:类PizzaBuilder 中的私有(private)字段是重复的。当私有(private)字段的数量越来越大时,这会很烦人。有什么办法可以避免吗?

最佳答案

关于如何去除重复。

我会得到更多的反对票 :) 但也许是这样的?

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

public static class Builder {
private Pizza pizza = new Pizza();

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

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

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

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

public Pizza build() {
return pizza;
}
}

private Pizza() {
}
}

关于java - Joshua Bloch 的 Builder 模式和 PMD 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com