繁体   English   中英

如何创建一个包含许多相同对象的构造函数,但如果一个对象为空则忽略它?

[英]How can I make a constructor that contains a number of the same objects but if one its empty to ignore it?

我想为包含四个填充的包装创建一个构造函数,但是如果一个填充为空(例如只使用2或3而不是4)来执行代码而没有任何问题。

我目前只能使用此代码只包含一个填充。

Wrap one=new Wrap( new Bread("Italian"), new Filling("Ham"),new Topping("Cheddar"));

使用当前的构造函数,您只能有零( null )或一个面包,填充和顶部。

您需要重载构造函数以允许更多输入选项。

如果您想要多个填充并且最多只有一个顶部,请添加此构造函数

Wrap(Bread b, List<Filling> fillings, Topping topping)

如果你想要有多个填充和浇头,那么这个

Wrap(Bread b, List<Filling> fillings, List<Topping> toppings)

或者只允许最后一种情况,并使用Collections.singletonList()来获取一个项目的列表。


你可以使用this()组合它们。

总结一下,这就是一个例子

Bread bread;
List<Filling> fillings;
List<Topping> toppings;

public Wrap(Bread b, List<Filling> fillings, List<Topping> toppings) {
    // ...
}

public Wrap(Bread b, Filling f, Topping t) {
    this(b, Collections.singletonList(f), Collections.singletonList(t));
}

public Wrap(Bread b, List<Topping> toppings) {
    // Is this a pizza?
    this(b, null, toppings);
}

我建议使用一个构造函数来获取填充列表,这样你就可以拥有一个构造函数,并强制调用者提供列表,即使它是空的。 这将允许任何数量的填充。

如果4是最大值,则调用者可以为每个未使用的参数传入null

如果填充具有公共基类,则列表可以将基类作为其类型。 (或者,对象,如果你必须走得那么远,虽然这似乎不是一个好主意。)另一种方法是使用Varargs与基类。

凌乱的方法是生成一堆构造函数,提供所有参数组合,但如果你有这么多的参数,它就会有一个糟糕的“代码味道”。

正确的答案取决于您尝试提供的界面以及您希望如何使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM