Введите класс <T>с Джин - PullRequest
       49

Введите класс <T>с Джин

3 голосов
/ 17 августа 2011

Есть ли способ ввести класс типа Class<T> в джин? Я не могу заставить его работать, например:

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);

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

Если бы это был обычный Guice (в отличие от Джина), вы могли бы сделать:

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

Но Джин не поддерживает .toInstance(...) привязок.Вместо этого вы должны иметь возможность использовать метод Provider или @Provides, например:

@Provides
Class<Bar> providesBarClass() {
  return Bar.class;
}
3 голосов
/ 17 августа 2011

Это невозможно.Отражение запрещено на стороне клиента, поэтому в GIN для внедрения зависимостей используется отложенное связывание.Это означает, что во время компиляции GWT генерирует целевые реализации, которые неизвестны в вашем случае.

...