如何创建DRYer构造函数

AJC*_*Col 0 java constructor list

有什么办法可以让以下任何构造函数重复性降低吗?即只使用一个构造函数或没有多个'topping.add'调用?我的目标是制作一个可以有1,2或3种不同配料的披萨

private PizzaBase base;
List<PizzaTopping> toppings = new ArrayList<PizzaTopping>();

public Pizza(PizzaBase base, PizzaTopping topping) //Constructor for pizza with 1 topping
{
    setBase (base);
    toppings.add(topping);
}

public Pizza(PizzaBase base, PizzaTopping topping, PizzaTopping topping2) //Constructor for pizza with 2 toppings
{
    setBase (base);
    toppings.add(topping);
    toppings.add(topping2);
}

public Pizza(PizzaBase base, PizzaTopping topping, PizzaTopping topping2, PizzaTopping topping3) //Constructor for pizza with 3 toppings
{
    setBase (base);
    toppings.add(topping);
    toppings.add(topping2);
    toppings.add(topping3);

}
Run Code Online (Sandbox Code Playgroud)

最初我在考虑使用for循环将提供的顶部添加到列表中,但我不确定如何迭代构造函数给出的值

小智 5

使用varargs你可以根据需要使用尽可能多的浇头,不要在构造函数中担心它,你把它当作一个列表

private PizzaBase base;
List<PizzaTopping> toppings = new ArrayList<PizzaTopping>();

public Pizza(PizzaBase base, PizzaTopping... toppings) //Constructor for pizza with 1 topping
{
    setBase (base);
    for(PizzaTopping topping : topings)
        toppings.add(topping);
}
Run Code Online (Sandbox Code Playgroud)