Kotlin,Dagger,Nullable和Named找不到@Inject的值

问题描述 投票:2回答:1

我有一个String类型的属性。我能够@Inject值很好,直到我尝试将@Named属性添加到属性。如果我使用'String'而不是可空字符串,一切也可以正常工作,但是值可以为空,所以我需要'?'。

在我的模块中,我有:

@Provides
@Named("someStringOrNull")
fun provideSomeStringOrNull(): String? = "STRING OR NULL"

在我的活动中,我有:

@set:Inject
@set:Named("someStringOrNull")
var someStringOrNull: String? = null

我收到此错误:

Error:(11, 2) error: java.lang.String cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
public abstract void inject(@org.jetbrains.annotations.NotNull()
                     ^
  java.lang.String is injected at
      com.scrawlsoft.daggerwoes.MainActivity.setSomeStringOrNull(p0)
  com.scrawlsoft.daggerwoes.MainActivity is injected at
      com.scrawlsoft.daggerwoes.AppComponent.inject(target)

如果我删除@Named attr,这样可以正常工作,所以我很确定'@set:'是正确的,但我可能会弄错。

有关如何使这项工作的任何建议? (目前,我正在考虑将它包装在一个自定义类中,这样我就不需要@Named,但这对我来说似乎很浪费。)

完整的源代码可以在:https://github.com/gmadrid/DaggerWoes/tree/master/app/src/main/java/com/scrawlsoft/daggerwoes找到

谢谢您的帮助。

android kotlin dagger-2
1个回答
3
投票

您忘了使用@JvmField来指示Kotlin编译器将您的属性公开为字段而不是生成getter / setter:

@Inject
@JvmField
@field:Named("someStringOrNull")
internal var someStringOrNull: String? = null
© www.soinside.com 2019 - 2024. All rights reserved.