我在通过Dagger模块返回可为null的NfcAdapter时遇到问题。这里是:

  @Provides
  @Singleton
  @Nullable
  public NfcAdapter provideNfcAdapter() {
    return NfcAdapter.getDefaultAdapter(context);
  }

但是,该项目无法生成,并且我收到错误消息:



如何解决?我为我的BluetoothAdapter提供了类似的提供方法,它可以按预期工作。

我尝试在“ Activity ”中按以下方式对其进行初始化:
var nfcAdapter: NfcAdapter? = null @Inject set

最佳答案

您需要在字段中添加@Nullable批注。如the docsthe code所示,任何具有简单名称“Nullable”的注释都可以使用。

尽管您可以使用?在Kotlin中标记可空性,但这不会将Kotlin中的“可空”信息发布到Java:像Dagger这样的Java处理器无法读取类文件来确定该字段是可空的。 (这是possible through some Kotlin reflection,但是Dagger从v2.17开始不这样做。)尽管您的代码是安全的,但Dagger无法通过读取字节码来确定这一点,并且会引发错误。

10-05 23:08