我在通过 Dagger 模块返回可为空的 NfcAdapter 时遇到问题。在这里:
@Provides
@Singleton
@Nullable
public NfcAdapter provideNfcAdapter() {
return NfcAdapter.getDefaultAdapter(context);
}
但是项目无法构建,我收到错误消息:
error: [dagger.android.AndroidInjector.inject(T)] android.nfc.NfcAdapter is not nullable, but is being provided by @Provides @Singleton @javax.annotation.Nullable android.nfc.NfcAdapter
如何解决?我为我的 BluetoothAdapter 提供了类似的方法,它按预期工作。
我尝试在我的 Activity 中按如下方式初始化它:
var nfcAdapter: NfcAdapter? = null @Inject set
最佳答案
您需要向该字段添加一个 @Nullable
注释。任何具有简单名称“Nullable”的注释都可以,如 the docs 中所列。和 the code .
尽管您可以使用 ?
在 Kotlin 中标记可空性,但这不会将“可空”信息从 Kotlin 发布到 Java:像 Dagger 这样的 Java 处理器无法读取类文件来确定该字段意味着可以为空。 (这是 possible through some Kotlin reflection ,但从 v2.17 开始,Dagger 不会这样做。)尽管您的代码是安全的,但 Dagger 无法通过读取字节码来确定这一点,它会抛出错误。
关于java - NfcAdapter 不可为空,但由@Provides @Singleton @javax.annotation.Nullable android.nfc.NfcAdapter 提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50928857/