假设我有抽象类 Car,并且有 x 个扩展类 Car 的具体类(RedCar、BlueCar ...)。然后我有具有属性 Car[] cars 的类 Garage。
我想为 Garage 类编写一个布尔方法,该方法将遍历汽车并在找到搜索汽车(作为参数传递的具体类型之一(RedCar、BlueCar..))时返回 true,否则返回 false。
最好的方法是什么?
现在,我有这样的事情:
public boolean hasCar(Class<? extends Car> c) {
for (int i = 0; i < this.cars.length; i++) {
if (c.isInstance(this.cars[i])) {
return true;
}
}
return false;
}
但是如果我创建一个包含所有可能的 Car 类型(Car 的子类)的枚举,向 Car 类添加一个属性,它将保存枚举中的常量并基于它进行比较,这不是更好吗?
像这样的东西:
public enum CarType{
RED_CAR, BLUE_CAR
}
public abstract class Car{
public CarType type;
Car(CarType type){
this.type = type;
}
}
public class RedCar extends Car{
public RedCar(){
super(CarType.RED_CAR);
}
}
public class BlueCar extends Car{
public BlueCar(){
super(CarType.BLUE_CAR);
}
}
public class Garage{
private Car[] cars;
public boolean hasCar(CarType type) {
for (int i = 0; i < this.cars.length; i++) {
if(this.cars[i].type == type){
return true;
}
}
return false;
}
}
哪一个是更好的方法?