Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin、Dagger、Nullable和Named找不到@Inject的值_Android_Kotlin_Dagger 2 - Fatal编程技术网

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

Android Kotlin、Dagger、Nullable和Named找不到@Inject的值,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我有一个类型为String?的属性?。在我尝试向属性添加@Named属性之前,我可以@injectthevalue。如果我使用“String”而不是可为null的字符串,那么一切都可以正常工作,但是值是可为null的,所以我需要“?” 在我的模块中,我有: @Provides @Named("someStringOrNull") fun provideSomeStringOrNull(): String? = "STRING OR NULL" 在我的活动中,我有: @set:Inject @s

我有一个类型为String?的属性?。在我尝试向属性添加@Named属性之前,我可以@injectthevalue。如果我使用“String”而不是可为null的字符串,那么一切都可以正常工作,但是值是可为null的,所以我需要“?”

在我的模块中,我有:

@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,但这对我来说似乎是浪费。)

完整的源代码可在以下位置找到:


谢谢您的帮助。

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

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

Kotlin/Dagger与typealias一起工作了吗?这可能会解决我的问题。我已经记不起来了,但我想我遇到了类似的情况,实际上不得不使用
字段
。您是否尝试了
@field:Named(“someStringOrNull”)
而不是
@set:Named(“someStringOrNull”)
?是的
@field
不适用于本机类型,因为基础字段标记为“private”。这就是为什么我用
@set
将属性移动到setter。