Джошуа Блох ' s Шаблон Builder и предупреждения PMD

Я написал класс с использованием шаблона Джошуа Блоха Builder, который похож на этот пример Пиццы:

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 ()) Избегайте создания экземпляров через частные конструкторы извне класс конструктора. Создание путем частного конструкторы из-за пределов класс конструктора часто вызывает генерация аксессуара. Завод метод или непривитизацию конструктор может устранить это ситуация. Созданный файл класса на самом деле интерфейс. Это дает класс доступа возможность вызвать новую скрытую область пакета конструктор, который принимает интерфейс как дополнительный параметр. Эта превращает частный конструктор эффективно в одном пакете масштабы, и сложно различить.
  2. Класс не может быть создан и не предоставляет никаких статических методов или поля. Класс с частным конструкторов и не имеет статические методы или поля не могут быть

Должен ли я просто игнорировать эти предупреждения?

Другой вопрос: закрытые поля в классе Pizza и Builder дублируются. Это будет раздражать, когда количество приватных полей станет больше. Есть ли способ избежать этого?

5
задан skaffman 30 May 2011 в 09:25
поделиться