Мне кажется, что реализация Guice делает некоторые очень хитрые вещи при работе с дженериками.Похоже, что знает во время выполнения об общих типах, используемых во время компиляции.Давайте рассмотрим простой пример:
@Inject
public void Bar(Provider<Foo> genericInjector){
...
Во время выполнения Guice внедрит правильную реализацию Provider
здесь (то есть ту, которая предоставляет Foo
экземпляров).Но из того, что я знаю, универсальные типы стираются во время выполнения (см .: Стирание типов ).Итак, все, что Guice действительно видит во время выполнения, это:
@Inject
public void Bar(Provider genericInjector){
....
Так как же возможно, что Guice знает, какую реализацию Provider
ввести?