Guice:如何获取TypeLiteral包装泛型的实例?

18 java guice

我有一个通用的数据库访问类,我使用TypeLiteral结构进行绑定.现在在测试中我想模拟该类,并且我已经创建了一个Provider,它创建了一个模拟实例.在我的测试中,我想访问该模拟来定义其行为.现在的问题是,我如何从注射器中检索物体?

这是我的约束定义:

binder.bind(new TypeLiteral<GenericDbClass<Integer>>(){}).GenericDbClassProvider.class);
Run Code Online (Sandbox Code Playgroud)

通常我会得到这样的实例:

injector.getInstance(GenericDbClass.class);
Run Code Online (Sandbox Code Playgroud)

但由于我没有将GenericDbClass的实现绑定到接口本身,我不知道该怎么做.我认为复杂吗?

任何想法/帮助非常感谢!

jac*_*obm 43

使用Guice的Key设施,这是为了解决这类问题.在你的情况下

injector.getInstance(Key.get(new TypeLiteral<GenericDbClass<Integer>>(){});
Run Code Online (Sandbox Code Playgroud)

会做的.

  • 如果您不需要提供任何绑定注释,`injector.getInstance(new Key <GenericDbClass <Integer >>(){})`也将起作用. (17认同)