我目前正在尝试将包含Map<? extends CustomModule, CustomModule>
(来自其他自定义模块系统)的地图条目添加为guice模块中的绑定。
到目前为止我的代码看起来像这样:
manager.getRegistry().forEach(new BiConsumer<Class<? extends CustomModule>, ModuleRegistry.Entry>() {
@Override
public void accept(Class<? extends CustomModule> moduleClass, ModuleRegistry.Entry entry) {
bind(moduleClass).to(entry.getModule()); // getModule() returns the instance which implements moduleClass
}
});
Guice遗憾地需要直接类而不是通配符(“?extends”)。 由于我已经获得了“绑定”,是否有另一种方法将它们添加到注射器中?
提前致谢!
答案 0 :(得分:0)
所以在尝试了各种其他可能的方法之后,我终于找到了一个有效的方法。 由于最初的问题是Guice需要“捕获”某些东西(在这种情况下“捕获?扩展模块实例”,基本上意味着某个东西是某个模块的实例)并且失败了,我不得不投我的已知模块类为其原始类型,如下所示:
final Class moduleClass = (Class) aClass;
final Binding binding = injector.getExistingBinding(Key.get(moduleClass));
if (binding == null) {
bind(moduleClass).toInstance(entry.getModule());
}
我还必须在我的情况下添加一个空检查,但它还包括如何将你的未知类转换为guice的“Key”帮助器。