Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 使用Dagger 2提供函数依赖大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用Dagger 2提供一个函数作为依赖:

@module
class DatabaseModule {

    @Provides
    @Singleton
    fun provideDatabase(application: Application,betaFilter: (BetaFilterablE) -> Boolean): Database {
        return Database(application,BuildConfig.VERSION_CODE,betaFilter)
    }

    @Provides
    @Suppress("ConstantConditionIf")
    fun provideBetaFiler(): (BetaFilterablE) -> Boolean {
        return if (BuildConfig.FLAVOR_audience == "regular") {
            { it.betaOnly.not() }
        } else {
            { true }
        }
    }

}

不幸的是,它似乎不起作用:

[dagger.android.AndroidInjector.inject(T)] kotlin.jvm.functions.Function1<? 
super com.app.data.betaFilterable,java.lang.Boolean> 
cAnnot be provided without an @Provides-Annotated method.

在这里错过了什么?

解决方法

它不起作用,因为为了允许调用超类型的函数来代替lambda((Any) – >布尔值可以和(BetaFilterablE) – >布尔)一起使用函数作为参数生成字节码到允许这个.

以下代码

object Thing

fun provide(): (Thing) -> Boolean {
    TODO()
}

fun requires(func: (Thing) -> Boolean) {
    TODO()
}

结果如下签名:

-LThing(?super Thing)和LThing(Thing)之间的细微差别使得这些类型与Dagger不兼容.

我不相信有可能使这项工作,你需要定义一个不相同的单独的接口?超/?像Function1一样扩展属性.

大佬总结

以上是大佬教程为你收集整理的android – 使用Dagger 2提供函数依赖全部内容,希望文章能够帮你解决android – 使用Dagger 2提供函数依赖所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。