我有三个类(例如)
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注入这些类(而不是使用丑陋的静态类名数组或类名enum)。我该怎么做呢?
看看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
}
}
}