android - Kotlin、Dagger、Nullable 和 Named 找不到 @Inject 的值

标签 android kotlin dagger-2

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

在我的模块中,我有:

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

在我的 Activity 中,我有:

@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

感谢您的帮助。

最佳答案

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

@Inject
@JvmField
@field:Named("someStringOrNull")
internal var someStringOrNull: String? = null

关于android - Kotlin、Dagger、Nullable 和 Named 找不到 @Inject 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49032759/

相关文章:

android - Realm 插件 Dagger 构建失败,找不到符号类 DaggerApplicationComponent

java - 如何迭代 HashMap 以获取每四个键值对?

android - Unresolved reference : FirebaseVisionLabelDetectorOptions, FirebaseVisionCloudLabel

java - Dagger2 找不到带注释的方法

java - 为什么 Dagger 2 中需要@SubComponent?

android - Dagger 2 : Scoping and handling release/cleanup of provided injection

安卓 : MediaPlayer getDuration() and getCurrentPosition() has NullPointerException

android - 公共(public) api com.android.internal.r Android numberpicker

android - 如何在微调器中添加提示

android - 对包含两种数据类的 ArrayList<Any> 进行排序