我有一个不同类的实例列表,我想将它们中的每一个绑定到它自己的类。
我尝试使用binder.bind(obj.getClass()).toInstance(obj)
进行foreach循环,但是当然这不能编译,因为编译器无法解析通用T.
如何才能实现这一目标?
答案 0 :(得分:5)
这里你需要的只是一个原始类型的强制转换。正如下面chooks的评论(谢谢!),Guice有效地表现为从键(通常是类对象)到值(该类的提供者)的映射,而泛型只是帮助保持常见情况理智。如果你确定你的密钥匹配,你可以覆盖这样的泛型:
@Override
protected void configure() {
for (Object object : getYourListOfInitializedObjects()) {
bindObjectAsSingleton(object);
}
}
/** Suppress warnings to convince the Java compiler to allow the cast. */
@SuppressWarnings({"unchecked", "rawtypes"})
private void bindObjectAsSingleton(Object object) {
bind((Class) object.getClass()).toInstance(object);
}
正如上面提到的Vladimir,这往往不会鼓励优秀的Guice设计,因为即使您拥有DependencyImpl
工具Dependency
,上述内容也只会创建与{{1}的绑定}}。此外,必须在没有Guice注入的情况下创建初始化单例列表中的所有类,因此您将自己限制在没有Guice帮助的情况下从外部初始化的类。如果你从遗留的“单身人士堆”迁移到Guice,你可以使用上述模式,但如果你尽快构建这样的DependencyImpl
方法,你可能会更进一步:
configure