3

有没有办法Class<T>在 gin 中注入类类型?我似乎无法让它工作,例如:

class GenericFoo<T> {

  private final Class<T> klass;

  @Inject
  public GenericFoo(Class<T> klass) {
    this.klass = klass;
  }
}

class Bar { }

在某处注入一个实例:

..
@Inject
GenericFoo<Bar> instance;
..

和一个 GinModule 包含以下内容:

bind(new TypeLiteral<Class<Bar>>() {}).to(Bar.class);

谢谢

4

2 回答 2

3

这是不可能的。客户端禁止反射,因此依赖注入的 GIN 使用延迟绑定。这意味着在编译期间,GWT 会生成在您的情况下未知的目标实现。

于 2011-08-17T13:40:18.713 回答
3

如果这是普通的 Guice(而不是 Gin),你可以这样做:

bind(new TypeLiteral<Class<Bar>>(){}).toInstance(Bar.class);

但是 Gin 不支持.toInstance(...)绑定。相反,您应该能够使用 aProvider@Provides方法,例如:

@Provides
Class<Bar> providesBarClass() {
  return Bar.class;
}
于 2011-08-22T20:42:56.793 回答