gpt4 book ai didi

android - 将 Dagger 模块类中的静态方法转换为 Kotlin

转载 作者:行者123 更新时间:2023-11-29 00:57:47 27 4
gpt4 key购买 nike

我在 Github 中有以下项目:https://github.com/Ali-Rezaei/TMDb-Paging我使用 Dagger2 进行依赖注入(inject)。

我的一个 Module 类在 java 中如下所示:

@Module
public abstract class DetailModule {

@FragmentScoped
@ContributesAndroidInjector
abstract DetailFragment detailFragment();

@Provides
@ActivityScoped
static Movie provideMovie(DetailActivity activity) {
return activity.getIntent().getExtras().getParcelable(EXTRA_MOVIE);
}
}

如您所见,provideMovie 方法是静态的。当我将它转换为 Kotlin 时:

@Module
abstract class DetailModule {

@FragmentScoped
@ContributesAndroidInjector
internal abstract fun detailFragment(): DetailFragment

companion object {

@Provides
@ActivityScoped
internal fun provideMovie(activity: DetailActivity): Movie {
return activity.intent.extras.getParcelable(EXTRA_MOVIE)
}
}
}

但是当我构建项目时,出现以下 Kotlin 编译器错误:

error: @Provides methods can only be present within a @Module or @ProducerModule
public final com.sample.android.tmdb.vo.Movie provideMovie$app_debug(@org.jetbrains.annotations.NotNull()

在 Kotlin 中上课有什么解决方案吗?

最佳答案

Comanion 对象 在技术上是不同的类,并且未使用 @Module 进行注释。 (所以你得到了那个错误)

您需要为方法使用 JVM 注解。所以 Kotlin 将在 DetailModule 本身内部创建一个静态方法。

尝试@JvmStatic

@Module
companion object {
@JvmStatic
@Provides
@ActivityScoped
internal fun provideMovie(activity: DetailActivity): Movie {
return activity.intent.extras.getParcelable(EXTRA_MOVIE)
}
}

关于android - 将 Dagger 模块类中的静态方法转换为 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53407039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com