Почему Guice не находит привязку List <Interface>?

У меня есть интерфейс с несколькими реализациями:

interface PuNoManager { fun notifyUser(userId: Int) } class FcmManager @Inject constructor(val fcmClient: FcmClient) : PuNoManager { override fun notifyUser(userId: Int) { ... } } class ApnsManager @Inject constructor(val apnsClient: ApnsClient) : PuNoManager { override fun notifyUser(userId: Int) { ... } } 

Которые оба связаны в моем Module вместе с @Provides -annotated методом для получения List<PuNoManager> :

 class PuNoModule: AbstractModule() { override fun configure() { bind(ApnsManager::class.java) bind(FcmManager::class.java) } @Provides fun puNoManagers(apnsManager: ApnsManager, fcmManager: FcmManager): List<PuNoManager> { return listOf(apnsManager, fcmManager) } } 

Проблема возникает, когда у меня есть класс, которому нужен List<PuNoManager> -Guice, жалуется, что тип не был связан:

 Explicit bindings are required and java.util.List<? extends ...PuNoManager> is not explicitly bound. while locating java.util.List<? extends ...PuNoManager> 

Я знаю, что моя настройка Guice работает, поскольку у меня раньше был только ApnsManager и я добавляю второй PuNoManager , FcmManager . Проблема связана с зависимым классом, запрашивающим инъекцию List<PuNoManager> вместо ApnsManager .

    List<X> в Kotlin переводится в java.util.List<? extends X> java.util.List<? extends X> на JVM. По-видимому, Guice не поддерживает инъекцию таких ценностей. Чтобы избежать подстановочного знака здесь, вы можете вместо этого использовать MutableList<X> , что переводит на java.util.List<X>