Привязка карты классов к экземплярам внутри модуля guice

В настоящее время я пытаюсь добавить записи карты, состоящей из 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"). Поскольку я уже получил "привязки", есть ли другой способ добавить их в инжектор?

Заранее спасибо!

1 ответ

Решение

Поэтому, попробовав другие возможные способы, я наконец нашел тот, который работает. Поскольку первоначальная проблема заключалась в том, что Guice требовал "захвата" чего-либо (в данном случае "захвата? Экземпляра модуля extends", в основном означает что-то, что является экземпляром чего-то, что является модулем), и произошел сбой, мне пришлось отлить свой уже известный класс модуля к его необработанному типу, как это:

final Class moduleClass = (Class) aClass;
final Binding binding = injector.getExistingBinding(Key.get(moduleClass));
if (binding == null) {
    bind(moduleClass).toInstance(entry.getModule());
}

Мне также пришлось добавить нулевую проверку в моем случае, но она также включает способ приведения неизвестного класса к помощнику "Ключа".

Другие вопросы по тегам