错误:无法访问NotNull

时间:2017-10-09 11:50:48

标签: java kotlin dagger-2

我在编译时遇到上面的错误,而且它没有转到任何源文件。在慢慢识别导致问题的变化后,发现它显然是匕首2注入导致问题。

@FragmentScope
@Subcomponent
public interface MyComponent {
    void inject(MyJavaFragment myJavaFragment);

    void inject(MyJavaClass myJavaClass);

    void inject(MyKotlinClass myKotlinClass); // <- if change to Java, all works
}

我将MyKotlinClass从Java代码转换为Kotlin,并且发生了错误。这是在一个库中,我已经在build.gradle中使用它了

kapt "com.google.dagger:dagger-compiler:$daggerVersion"

为什么呢? (注意:应用程序代码最初是Java,因此除非需要,否则我没有将所有内容更改为Kotlin。)

2 个答案:

答案 0 :(得分:4)

经过长时间的调查,发现,该库的调用功能,仍在使用Java Annotation

annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"

但是我的图书馆正在使用上面问题中提到的kapt。所以这是使用的注释处理器的冲突,而我怀疑使用Java注释处理器。通过将调用库注释处理器更改为

kapt "com.google.dagger:dagger-compiler:$daggerVersion"

会解决问题。 (记得在顶部添加apply plugin: 'kotlin-kapt'

答案 1 :(得分:0)

除了Elye提到的情况外,当在Dagger模块上用@Inject注释的字段没有相应的@Provides方法,或者在至少用@Inject注释的构造函数中,也会发生这种情况。

我知道已经有一个Dagger错误在抱怨这个问题,但是今天,我在使用@Provides方法删除模块并希望通过一次干净的重建来告诉我该错误丢失了什么之后,偶然发现了这个问题……但我却收到此错误。