インジェクターが与えられた場合、パラメーター化された型の特定のインスタンスを取得する方法を考えています (ただし、Type
それ自体は持っていません)。私は自分自身を説明しましょう:
次のバインディングを作成したとします。
List<Apple>
にバインドArrayList<Apple>
Set<Pears>
にバインドHashSet<Pear>
- etc... その他
Collection
の商品Fruit
について
インスタンスができたFruit fruit
ので、適切なインスタンスを取得したいと思いCollection
ます。どうすればこれを達成できますか?
これは、私のすべての説明をコードで示す小さな作業スニペットです。
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
public class TestGuiceDynamicType {
public static interface Fruit {
}
public static class Apple implements Fruit {
}
public static class Pear implements Fruit {
}
public static class FruitModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<Collection<Apple>>() {
}).to(new TypeLiteral<ArrayList<Apple>>() {
});
bind(new TypeLiteral<Collection<Pear>>() {
}).to(new TypeLiteral<HashSet<Pear>>() {
});
}
}
private <T extends Fruit> static void addFruit(Injector injector, T fruit) {
Collection<T> collection = ????? // What to do here to get the appropriate collection
collection.add(fruit);
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new FruitModule());
Collection<Apple> appleCollection = injector.getInstance(Key.get(new TypeLiteral<Collection<Apple>>() {
}));
appleCollection.add(new Apple());
addFruit(injector, new Pear())
}
}