1
注:類似の名前にもかかわらず、Dynamically bind instances using guiceの回答では、すべての注入が直接注入され、地図には注入されないので、私の問題は解決できません。Guiceでインスタンスを動的にバインドする
私はClass
- >インスタンスのペアを持っています。それらはGuavaのClassToInstanceMap
に保存されています。そのClassToInstanceMap
を私のカスタムModule
に渡して、実際のバインディングを実行するために各エントリを通過したいと思います。それ、どうやったら出来るの?私は上記のコードをコンパイルすると
import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
public class InstanceModuleBuilder {
private final ImmutableClassToInstanceMap.Builder<Object> instancesBuilder = ImmutableClassToInstanceMap.builder();
public <T> InstanceModuleBuilder bind(Class<T> type, T instance) {
instancesBuilder.put(type, instance);
return this;
}
public Module build() {
return new InstanceModule(instancesBuilder.build());
}
static class InstanceModule extends AbstractModule {
private final ImmutableClassToInstanceMap<Object> instances;
InstanceModule(ImmutableClassToInstanceMap<Object> instances) {
this.instances = instances;
}
@Override protected void configure() {
for (Class<?> type : instances.keySet()) {
bind(type).toInstance(instances.getInstance(type)); // Line with error
}
}
}
}
、私は次のエラーを取得する:
for (Map.Entry<? extends Object,Object> e: instances.entrySet()) {
bind(e.getKey()).toInstance(e.getValue());
}
それとも
for (Map.Entry<? extends Object,Object> e: instances.entrySet()) {
bind(e.getKey()).toInstance(e.getKey().cast(e.getValue()));
}
しかし:
InstanceModuleBuilder.java:[38,52] incompatible types: inference variable T has incompatible bounds
equality constraints: capture#1 of ?
upper bounds: capture#2 of ?,java.lang.Object
は、私はまた、次のバインディングを試してみましたなしコンパイル。