Как внедрить несколько классов в метод (guice)? - PullRequest
1 голос
/ 30 декабря 2011

У меня есть три класса (например)

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. Как бы я это сделал?

1 Ответ

3 голосов
/ 30 декабря 2011

Посмотрите на Guice Multibinder. Он может ввести Set<Vehicle> для вас.

http://google -guice.googlecode.com / SVN / багажник / последнего Javadoc / COM / Google / впрыснуть / multibindings / Multibinder.html

РЕДАКТИРОВАТЬ: Вам все равно, вероятно, придется ввести это как переменную-член или конструктор.

РЕДАКТИРОВАТЬ: Добавлен пример кода. Делать это без 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
     }
   }
 }
...