我正在使用Kotlin和Dagger 2开发一个Android项目。我有一个NetworkModule
,其中定义了一些提供程序功能。
@Module
object NetworkModule {
@Provides
@JvmStatic // Here uses @JvmStatic
internal fun provideSomething(): Something {
...
}
}
我看到有些人使用Kotlin @JvmStatic
,有些人使用匕首的@Reusable
来注释提供程序功能:
@Module
object NetworkModule {
@Provides
@Reusable // Here uses @Reusable
internal fun provideSomething(): Something {
...
}
}
和..某些人同时使用:
@Module
object NetworkModule {
@Provides
@JvmStatic // Here use both @JvmStatic
@Reusable // and uses @Reusable
internal fun provideSomething(): Something {
...
}
}
我很困惑。我的两个问题是:
对@JvmStatic
和/或@Reusable
进行注释的动机是什么?这样做的原因是什么?这样做的好处是什么?
使用@JvmStatic
或@Reusable
哪个更好?还是一个很好?还是我应该同时使用两者?如果是,那么同时使用两者的原因是什么?
答案 0 :(得分:0)
如果您将模块声明为Kotlin对象,则需要@JvmStatic
。该限制已通过dagger 2.25删除。您还可以查看this issue了解更多信息。
如果您使用Dagger 2.25或更高版本,则不再需要使用@JvmStatic
。
来自@Reusable
文档:
一个范围,该范围指示绑定返回的对象可以(但可能不会)被重用。
{@ code @Reusable}在您希望限制一种类型的配置的数量时非常有用,但是没有特定的生存期,只能有一个实例。
如果您在多个位置注入相同的对象,并且具有相同的实例不是问题,那么这有助于避免为每种用法创建新对象。
@JvmStatic
和@Reusable
彼此不相关,根据您的需要,您可以使用其中一个,另一个或两者。