Guice: Как я могу получить экземпляр обобщенного TypeLiteral? - PullRequest
18 голосов
/ 22 июня 2011

У меня есть общий класс доступа к базе данных, который я связываю, используя конструкцию TypeLiteral.Теперь в тесте я хочу смоделировать этот класс и для этого создал провайдера, который создает фиктивный экземпляр.В моем тесте я хочу получить доступ к этому макету, чтобы определить его поведение.Теперь вопрос в том, как я могу извлечь объект из инжектора?

Это мое определение привязки:

binder.bind(new TypeLiteral<GenericDbClass<Integer>>(){}).GenericDbClassProvider.class);

Обычно я получаю такой экземпляр:

Но поскольку я не связываю реализацию GenericDbClass с самим интерфейсом, я не знаю, как это сделать.Считаю ли я сложным?

Любые идеи / помощь с благодарностью!

1 Ответ

43 голосов
/ 22 июня 2011

Используйте средство Guice's Key, которое предназначено именно для такого рода проблем. В вашем случае

injector.getInstance(Key.get(new TypeLiteral<GenericDbClass<Integer>>(){});

сделает свое дело.

...