2011-12-29 12 views
1

私は(例えば)3クラスメソッド(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 Multibinderを見てください。それはあなたのためにSet<Vehicle>を注入することができます。

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

EDIT:あなたはおそらくまだかかわらず、メンバ変数またはコンストラクタとしてそれを注入する必要があります。

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

関連する問題