HBG*_*HBG 3 android kotlin dagger-2
我有一个类实现了java.util.function.Function我想注入的接口,以便在另一个使用 Dagger2 的类中使用:
class MyUsefulClass @Inject constructor() : Function<List<String>, String> {
override fun apply(lines: List<String>): String {
// Do stuff
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
通常,我会@Binds在模块类中声明一个声明,如下所示:
@Module
interface MyModule {
@Binds
fun provideMyUsefulClass(concretion: MyUsefulClass): Function<List<String>, String>
}
Run Code Online (Sandbox Code Playgroud)
这种做法使我受益匪浅的所有其他类我已经在我的项目实现这个接口,但是在这一个实例中,我被错误消息映入眼帘:
@Binds methods' parameter type must be assignable to the return type…
有趣的是,将类的返回类型和@Binds声明更改为Function<MutableList<String>, String>fromFunction<List<String>, String>有效,一切都可以正常编译。
我在这里缺少什么?错误消息显然是不真实的。是否有一些我不知道的重大问题?
我怀疑这可能是“缺少”@JvmSuppressWildcards 的情况,因此 kotlin? extends String在List类型中添加了一些,这使得 dagger 编译器失败(错误消息应该包含更多提示)。
我想您需要将函数类型更改为Function<List<@JvmSuppressWildcards String>, String>使用它的位置。
这是一个众所周知的烦恼,您可以在此处阅读更详细的内容:https : //medium.com/@naturalwarren/dagger-kotlin-3b03c8dd6e9b
我怀疑这MutableList没有那个问题,因为你可以用它“读”和“写”字符串。