Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Guice AbstractModule中使用@Provides方法绑定泛型类型?_Java_Guice - Fatal编程技术网

Java 如何在Guice AbstractModule中使用@Provides方法绑定泛型类型?

Java 如何在Guice AbstractModule中使用@Provides方法绑定泛型类型?,java,guice,Java,Guice,例如 这里使用TypeLiteral和Key似乎都不合适,因为我希望返回类型仍然是T类型。thinks?使用类型擦除,Guice将无法从模块实例中获得足够的信息来确定要绑定的类型 相反,接受类文本并使用它。这个例子保留了泛型,但是如果您的用例不需要它们,您可以删除它们 T cannot be used as a key; It is not fully specified. //警告:未测试。如果需要,请修改。 公共最终类SomeModule扩展了AbstractModule{ 私人t类; 公

例如


这里使用TypeLiteral和Key似乎都不合适,因为我希望返回类型仍然是T类型。thinks?

使用类型擦除,Guice将无法从模块实例中获得足够的信息来确定要绑定的类型

相反,接受类文本并使用它。这个例子保留了泛型,但是如果您的用例不需要它们,您可以删除它们

T cannot be used as a key; It is not fully specified.
//警告:未测试。如果需要,请修改。
公共最终类SomeModule扩展了AbstractModule{
私人t类;
公共模块(t类){
t=t;
}
@凌驾
public void configure(){
//使用类实例而不是反射,因此这很好。
bind(t).toProvider(新提供程序(){
//…做事
});
}
}
另见:

  • (还)

使用类型擦除,Guice将无法从模块实例获得足够的信息来确定要绑定的类型

相反,接受类文本并使用它。这个例子保留了泛型,但是如果您的用例不需要它们,您可以删除它们

T cannot be used as a key; It is not fully specified.
//警告:未测试。如果需要,请修改。
公共最终类SomeModule扩展了AbstractModule{
私人t类;
公共模块(t类){
t=t;
}
@凌驾
public void configure(){
//使用类实例而不是反射,因此这很好。
bind(t).toProvider(新提供程序(){
//…做事
});
}
}
另见:

  • (还)

感谢您的快速响应和其他示例的链接!感谢您的快速响应和其他示例的链接!
// Warning: Untested. Please revise if needed.
public final class SomeModule<T> extends AbstractModule {
  private Class<T> t;

  public SomeModule(Class<T> t) {
    this.t = t;
  }

  @Override
  public void configure() {
    // Uses a class instance rather than reflection, so this is fine.
    bind(t).toProvider(new Provider<T>() {
      // ... do stuff
    });
  }
}