以下是我的问题的一个抽象示例:我有一个通用类(Car
),它有一个类型(brand
)。所有对象只应根据品牌而有所不同,基于此品牌的处理方式应不同。
此类的所有对象都收集在Service类的List中。该服务应该在整个列表上执行例程,其中大多数相同。只需一个函数调用就可以了。
基于这种类型,我想调用不同的方法:目前我正在为枚举类型断言等于并根据结果调用不同的方法。但这有点难看,我想知道是否有更好的解决方案呢?
class Car {
public enum Brand {
BMW, AUDI;
}
private Brand brand;
specificMeth1();
specificMeth2();
}
class Service {
List<Car> bmw;
List<Car> Audi;
processCar() {
processList(bmw);
processList(audi);
}
processList(List<Car> list) {
for (Car car : list) {
if (car.getBrand.equals(Brand.BMW)) {
specificMeth1();
} else {
specificMeth2();
}
}
}
}
答案 0 :(得分:27)
您应该将该方法放在枚举中:
public enum Brand {
BMW {
@Override
public void doSomething();
},
AUDI {
@Override
public void doSomething();
};
public abstract void doSomething();
}
var.getBrand().doSomething();
答案 1 :(得分:4)
考虑在枚举上定义一个抽象方法,如下所示:
public enum Brand {
BMW {
public void specificMethod() {
System.out.println("meth1");
}
},
AUDI {
public void specificMethod() {
System.out.println("meth2");
}
};
public abstract void specificMethod();
}
然后你可以打电话:
for (Car car : list) {
car.getBrand().specificMethod();
}