我有三个班级(例如)
Buick implements Vehicle
Chevy implements Vehicle
Ferrari implements Vehicle
我有一个方法
travelTo(ZipCode start, Zipcode end)
for(Class<Vehicle> v : vehicleInstances)
{
Vehicle car= v.getconstructor(ZipCode.class, ZipCode.class).newInstance(start,end).newInstance(start,end);
car.drive();
}
我想通过使用Guice注入这些类(而不是使用丑陋的类名称或类名称枚举)。我该怎么做
答案 0 :(得分:3)
看看Guice Multibinder。它可以为您注入Set<Vehicle>
。
编辑:你可能仍然需要将它作为成员变量或构造函数注入。
编辑:添加了示例代码。在没有IDE的情况下执行此操作,因此可能需要进行一些调整。
public class YourModule extends AbstractModule {
protected void configure() {
Multibinder<Vehicle> multibinder
= Multibinder.newSetBinder(binder(), Vehicle.class);
multibinder.addBinding().to(Buick.class);
multibinder.addBinding().to(Chevy.class);
multibinder.addBinding().to(Ferrari.class);
}
}
public class YourInterestingClass {
private final Set<Vehicle> vehicles;
@Inject
public YourInterestingClass(Set<Vehicles> vehicles){
this.vehicles = vehicles;
}
public void doSomethingWithVehicles(){
for(Vehicle vehicle: vehicles){
// do something
}
}
}