错误:无法访问NotNull

Ely*_*lye 3 java kotlin dagger-2

我在编译时遇到上述错误,并且它没有转到任何源文件。在慢慢识别导致问题的更改后,发现显然是 dagger 2 注入导致了问题。

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

    void inject(MyJavaClass myJavaClass);

    void inject(MyKotlinClass myKotlinClass); // <- if change to Java, all works
}
Run Code Online (Sandbox Code Playgroud)

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

kapt "com.google.dagger:dagger-compiler:$daggerVersion"
Run Code Online (Sandbox Code Playgroud)

为什么?(注意:应用程序代码最初是 Java,所以除非需要,否则我还没有将其全部更改为 Kotlin)。

Ely*_*lye 5

经过长时间的调查,发现这个库的Feature调用,仍然使用Java Annotation

annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
Run Code Online (Sandbox Code Playgroud)

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

kapt "com.google.dagger:dagger-compiler:$daggerVersion"
Run Code Online (Sandbox Code Playgroud)

就能解决问题。apply plugin: 'kotlin-kapt'(记得也要在顶部添加)