我正在阅读《Effective Java Edition 3》。在第 2 章第 14 页中,作者讨论了构建器模式并呈现了以下代码:
public abstract class Pizza {
public enum Topping { HAM, MUSHROOM, ONION, PEPPER, SAUSAGE }
final Set<Topping> toppings;
abstract static class Builder<T extends Builder<T>> {
EnumSet<Topping> toppings = EnumSet.noneOf(Topping.class);
public T addTopping(Topping topping) {
toppings.add(Objects.requireNonNull(topping));
return self();
}
abstract Pizza build();
// Subclasses must override this method to return "this"
protected abstract T self();
}
Pizza(Builder<?> builder) {
toppings = builder.toppings.clone(); // See Item 50
}
}
Run Code Online (Sandbox Code Playgroud)
上述抽象类的实现:
public class …Run Code Online (Sandbox Code Playgroud)