我正在用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
哪个更好?还是一个很好?还是我应该同时使用两者,如果是的话,为什么要同时使用两者?
如果您将模块声明为Kotlin对象,则需要@JvmStatic
。该限制已由dagger 2.25删除。您也可以检查this issue了解更多信息。
如果使用Dagger 2.25或更高版本,则不再需要使用@JvmStatic
。
来自@Reusable
文档:
一个指示绑定返回的对象可以(但可能不能)重用的范围。
{{@ code @Reusable}}在您希望限制一种类型的配置的数量时有用,但是没有特定的生存期,只能有一个实例。
如果在多个位置注入相同的东西,并且具有相同的实例不是问题,这可能有助于不为每种用法创建一个新对象。
[@JvmStatic
和@Reusable
彼此无关,根据您的需要,您可以使用其中一个,另一个或两者。