【问题标题】:Dagger2 @Nullable annotation with Kotlin带有 Kotlin 的 Dagger2 @Nullable 注释
【发布时间】:2017-03-25 17:44:01
【问题描述】:

来自匕首模块:

  @Provides @PerMediaSession @Nullable
    MediaControllerCompat provideMediaController(Context appContext, MediaSessionCompat mediaSessionCompat) {
        try {
            return new MediaControllerCompat(appContext, mediaSessionCompat.getSessionToken());
        } catch (RemoteException e) {
            e.printStackTrace();
            return null;
        }
    }

我注射的地方

class PlayerPresenter
@Inject constructor(val fileManager: FileManager,
                    @Nullable val mediaController: MediaControllerCompat?) : PlayerContract.Presenter { <...>

我得到以下编译错误

Error:(15, 10) error: android.support.v4.media.session.MediaControllerCompat is not nullable, 
but is being provided by @Provides @...di.PerMediaSession @android.support.annotation.Nullable android.support.v4.media.session.MediaControllerCompat 
...di.MediaSessionModule.provideMediaController$app_debug(android.content.Context, android.support.v4.media.session.MediaSessionCompat)
at:     <...where it is injected...>

我尝试将 dagger 模块转换为 Kotlin,这种情况下 Dagger 看到 Jetbrains @Nullable 注释,但由于某种原因在构造函数类中没有看到注释。

我使用 Dagger 2.9

【问题讨论】:

  • 你使用的是哪个 Dagger 库?你在用 kapt 吗?
  • 编译 "com.google.dagger:dagger:$rootProject.daggerVersion" kapt "com.google.dagger:dagger-compiler:$rootProject.daggerVersion" 版本是 2.9

标签: android kotlin dagger-2


【解决方案1】:

与 Kotlin 的交互性很棒,这是我的疏忽。

问题的发生是因为我在 dagger 模块中提供了接口实例,并提供方法接收会话兼容作为参数而没有 Nullable 注释。 Dagger 确实理解 Kotlin 中的可空类型,无需任何注释。

【讨论】:

    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多