[英]How to alternate between constructors with different parameters in java?
我有一个带有 2 个构造函数的 class,一个采用单个 object(鱼),另一个采用称为鱼(鱼)的对象数组。 有一个 function 可以将鱼添加到篮子中:
public Basket(int weight, Fish fishes) {
singleFish = true;
}
public Basket(int weight, Fish[] fishes) {
singleFish = false;
}
public boolean addFishes(Fish fish) {
//here I want to make it so that when I add a fish to a basket,
//it no longer uses the top constructor.
}
假设一个篮子以 1 条鱼开始,我怎样才能使它带一条鱼并在带一条鱼后使用第二个构造函数? 非常感谢。
除非我没有正确理解这个问题,否则为什么需要两次调用构造函数? 你可以使用这样的东西,你的Basket
维护一个鱼列表,在实例化时创建它,然后根据需要添加鱼。 无需保留有关篮子中有多少鱼的任何信息,因为您可以从鱼的集合中推断出这一点。
class Basket {
Collection<Fish> fishes;
public Basket(Fish... fishes) {
this.fishes = new ArrayList<>(Arrays.asList(fishes));
}
public void addFish(Fish... fishes) {
this.fishes.addAll(Arrays.asList(fishes));
}
public boolean isSingleFish() {
return this.fishes.size() == 1;
}
}
public Basket(int weight, Fish fish) {
this(weight, new Fish[] {fish};
singleFish = true;
}
public Basket(int weight, Fish[] fishes) {
singleFish = fishes.length == 1;
}
或者在这里你只需要一个带有可变参数的构造函数( Fish...
是Fish[]
类型的实际):
private final Fish[] fishes;
private final boolean singleFish;
public Basket(int weight, Fish... fishes) {
this.fishes = fishes;
singleFish = fishes.length == 1;
}
new Basket(45, hering, sardine, riba);
new Basket(75, shark);
private ArrayList<Fish> fishes;
public Basket(Fish fish) {
this(Collections.singletonList(fish));
}
public Basket(List<Fish> fishes) {
this.fishes = fishes == null ? new ArrayList<>() : fishes;
}
public isSingle() {
return fish.size() == 1;
}
public boolean addFishes(Fish fish) {
fishes.add(fish);
}
要使用的构造函数是根据您传递给它的参数类型来选择的。
Fish
数组与Fish
本身是不同的类型。
在 Java 中,任何类型的任何数组都是它自己的类型。
因此,您所要做的就是传递一组Fish
对象。
该数组可以为空,也可以只有一个 object,但必须是数组:
Fish [] fishes = new Fish[0];
Basket b = new Basket(0, fishes);
在此示例中,不传递一条鱼,但传递一个有效数组 object。
它甚至连一条鱼都没有空间,但这没关系。
它仍然是Fish[]
类型的有效 object,因此将调用第二个构造函数。
请注意,您不能将null
传递给Basket
构造函数,因为编译器将不知道要选择哪个构造函数版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.