На самом деле это именно то, для чего создан Guice.
Чтобы заставить getInstance () работать с интерфейсом, вам нужно сначала связать реализацию этого интерфейса в вашем модуле.
Итак, вам понадобится класс, который выглядит примерно так:
public class MyGuiceModule extends AbstractModule {
@Override
protected void configure() {
bind(Interface.class).to(Concrete.class);
}
}
Затем, когда вы создаете свой инжектор, вам просто нужно передать экземпляр вашего модуля в:
Injector injector = Guice.createInjector(new MyGuiceModule());
Теперь ваш вызов injector.getInstance(Interface.class)
должен вернуть новый экземпляр Concrete с использованием конструктора по умолчанию.
Конечно, есть еще много способов связывания, но это, вероятно, самый прямой путь.