我有3个对象
Car
SmallCar extends Car
LargeCar extends Car
使用这种方法我想在列表中计算特定类型的汽车:
public int availableCars(String carType) {
int count = 0;
for (Car i : fleet) {
if (i instanceof SmallCar) {
count++;
}
}
return count;
}
传递给定的carType的最佳方法是什么(如果它是String或其他更好的东西)有类似的东西:
if (i instanceof carTypeGiven)
该方法返回特定类型的汽车数量。
答案 0 :(得分:3)
传入类而不是指示所需类型的字符串。您可以使用以下通配符将其限制为Car
的子类:Class<? extends Car>
public int availableCars(Class<? extends Car> carType) {
int count = 0;
for (Car car : fleet) {
if (carType.isInstance(car)) {
count++;
}
}
return count;
}
使用Class.isInstance(Object)
确定车队中的车辆是否属于所需类型。
使用Java 8的流可以更简洁地做到这一点(假设fleet
是一个集合):
public long availableCars(Class<? extends Car> carType) {
return fleet.stream().filter(carType::isInstance).count();
}
如果fleet
是一个数组,则需要略有不同:
public long availableCars(Class<? extends Car> carType) {
return Arrays.stream(fleet).filter(carType::isInstance).count();
}
请注意,我已将返回类型更改为long
,因为Stream.count()
返回的是int
。您可以将返回类型保留为count()
,并将结果从int
转换为{{1}}。