2011-12-29 3 views
1

У меня есть три класса (например)Как ввести несколько классов в метод (guice)?

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

ответ

3

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

http://google-guice.googlecode.com/svn/trunk/latest-javadoc/com/google/inject/multibindings/Multibinder.html

EDIT: Вы все еще, возможно, придется Inject, что в качестве переменной-члена или конструктора, хотя.

EDIT: Добавлен пример кода. Выполняйте это без 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 
    } 
    } 
} 
+0

Это было полезно. Объяснение предложенной вами реализации многострочного блока было бы полезно для контекста здесь ... но в любом случае ваш ответ был полезен. – jayunit100

+0

@ jayunit100 - Добавлен код для примера. Надеюсь, он уточнит. – rfeak

Смежные вопросы