用Guice绑定类<! - ? - >

时间:2013-12-17 12:47:29

标签: dependency-injection guice

我有一个不同类的实例列表,我想将它们中的每一个绑定到它自己的类。 我尝试使用binder.bind(obj.getClass()).toInstance(obj)进行foreach循环,但是当然这不能编译,因为编译器无法解析通用T. 如何才能实现这一目标?

1 个答案:

答案 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