web-dev-qa-db-ja.com

ジェネリック型を注入するガイド

Guiceでジェネリック型を注入しようとしています。 CursorクラスにあるRepository <T>があります。

public class Cursor<T> {

    @Inject
    protected Repository<T> repository;

したがって、Cursor <User>を作成するときに、Guiceがリポジトリ<User>にリポジトリを挿入することも必要です。これを行う方法はありますか?

18
petomalina

TypeLiteral を使用する必要があります:

import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;

public class MyModule extends AbstractModule {

  @Override
  protected void configure() {
    bind(new TypeLiteral<Repository<User>>() {}).to(UserRepository.class);
  }
}

Cursor<T>のインスタンスを取得するには、Injectorが必要です。

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;

public class Main {

  public static void main(String[] args) {
    Injector injector = Guice.createInjector(new MyModule());
    Cursor<User> instance = 
        injector.getInstance(Key.get(new TypeLiteral<Cursor<User>>() {}));
    System.err.println(instance.repository);
  }
}

詳細 FAQ

24
gontard