android - 当我尝试提供接口(interface) Domain Mapper<PlayerData Entity, List<PlayerModel>> 的实现时出错

标签 android dagger-2

Dagger 2.32

当我尝试提供接口(interface) DomainMapper<PlayerDataEntity, List<PlayerModel>> 的实现时,出现以下错误

error: [Dagger/MissingBinding] me.androidbox.data.mappers.DomainMapper<? super me.androidbox.data.entities.PlayerDataEntity,? extends java.util.List<me.androidbox.domain.models.PlayerModel>> cannot be provided without an @Provides-annotated method.
public abstract interface ApplicationComponent {
                ^
      me.androidbox.data.mappers.DomainMapper<? super me.androidbox.data.entities.PlayerDataEntity,? extends java.util.List<me.androidbox.domain.models.PlayerModel>> is injected at
          me.androidbox.data.requests.imp.RequestPlayersImp(…, domainMapper)
      me.androidbox.data.requests.imp.RequestPlayersImp is requested at
          me.androidbox.app.application.ApplicationComponent.requestPlayersImp()
          

以下类(class):

class RequestPlayersImp @Inject constructor(
        private val footballServices: FootballServices,
        private val domainMapper: DomainMapper<PlayerDataEntity, List<PlayerModel>>
) : PlayersInteractor {
}

class DomainMapperImp @Inject constructor(): DomainMapper<PlayerDataEntity, List<PlayerModel>> {    
}

@Module
interface PlayerModule {

    @Binds
    fun provideRequestPlayersImp(requestPlayersImp: RequestPlayersImp): PlayersInteractor

    @Binds
    fun provideFootballServices(mockFootballServices: MockFootballServices): FootballServices

    @Binds
    fun provideDomainMapper(domainMapperImp: DomainMapperImp): DomainMapper<PlayerDataEntity, List<PlayerModel>>
}

但是,我可以通过创建一个新的接口(interface)来解决这个问题:

interface DomainMapperEntityToDomain : DomainMapper<PlayerDataEntity, List<PlayerModel>>

并按如下方式使用它。一切编译正常

class RequestPlayersImp @Inject constructor(
        private val footballServices: FootballServices,
        private val domainMapper:  DomainMapperEntityToDomain
) : PlayersInteractor {
}

class DomainMapperImp @Inject constructor(): DomainMapperEntityToDomain  {  
}

@Binds
fun provideDomainMapper(domainMapperImp: DomainMapperImp): DomainMapperEntityToDomain 

我的问题是为什么我不能使用以下界面:

DomainMapper<PlayerDataEntity, List<PlayerModel>>

非常感谢您的建议,

数据类以防万一它们很重要

@JsonClass(generateAdapter = true)
class PlayerDataEntity(
        val data: List<PlayerEntity>
)

data class PlayerModel(
    val playerId: Int,
    val firstname: String,
    val lastname: String,
    val birthday: String,
    val age: Int,
    val weight: Int,
    val height: Int,
)

最佳答案

使用这个:

DomainMapper<@JvmSuppressWildcards PlayerDataEntity, @JvmSuppressWildcards List< @JvmSuppressWildcards PlayerModel>>

而不是:

DomainMapper<PlayerDataEntity, List<PlayerModel>>

您可以在this link中找到更多详细信息。

关于android - 当我尝试提供接口(interface) Domain Mapper<PlayerData Entity, List<PlayerModel>> 的实现时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66229227/

相关文章:

Android View 到具有透明度的位图

android - ActionBarSherlock NAVIGATION_MODE_LIST 文本颜色

android - 有关 Android 与 RxAndroid、Dagger 2 和 Realm 的问题

android - 带有命名参数的 Kotlin 中的 Dagger 2 构造函数注入(inject)

java - 如果没有 @Provides- 或 @Produces-annotated 方法,则无法提供 Dagger2

android - Dagger2 - 生成的组件类中的 "Unused"模块

android - Android 中的蓝牙信号强度

java - 使用 convertView 和自定义数据 listView 时出现 NullPointerException

android - EditText直接到TextView

android - 在dagger 2中发现依赖循环