使用guice Multibindings扩展,可以注入某种类型的Set而不是该类型的单个实例。如何使用Injector.getInstance(...)从Injector手动获取此Set? 到目前为止,我的尝试导致了一个带有消息的ConfigurationException:
为java.util.Set< T>不能用作钥匙;它没有完全确定。
public final <T> Iterator<T> loadServices(Class<T> type) {
final TypeLiteral<Set<T>> lit = new TypeLiteral<Set<T>>() {};
final Key<Set<T>> key = Key.get(lit);
final Set<T> bindings = this.injector.getInstance(key);
return bindings.iterator();
}
答案 0 :(得分:4)
我使用此代码段创建TypeLiteral<Set<T>>
:
import com.google.inject.util.Types;
@SuppressWarnings("unchecked")
public static <T> TypeLiteral<Set<T>> setOf(Class<T> type) {
return (TypeLiteral<Set<T>>)TypeLiteral.get(Types.setOf(type));
}
我在这里有一些其他类似的便利:https://github.com/tavianator/sangria/blob/master/sangria-core/src/main/java/com/tavianator/sangria/core/TypeLiterals.java