java - NfcAdapter 不可为空,但由@Provides @Singleton @javax.annotation.Nullable android.nfc.NfcAdapter 提供

标签 java android kotlin annotations dagger

我在通过 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/

相关文章:

android - Room @Relation 使用复合索引

Kotlin - mutableMapOf() 会保留我输入的顺序

android - Gradle 自定义插件 : The Task. leftShift(Closure) 方法已被弃用,计划在 Gradle 5.0 中删除

java - bean 中的 NullpointerException Dao

java - 在java中查找XML文件中特定属性的值

java - 从另一个类调用类方法

Android ListView 跳转到光标位置

android - 如何使用 Google 的 Face API 检测角/中心 X、Y 坐标?

types - 如何在 Kotlin 中正确处理大于 127 的字节值?

java - Maven如何根据平台配置更改依赖版本(MySQL)