匕首模块类提供程序功能的批注

问题描述 投票:0回答:1

我正在用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 {
      ...
   }
}

我很困惑。我的两个问题是:

  1. 注释@JvmStatic和/或@Reusable的动机是什么?这样做的原因是什么?这样做的好处是什么?

  2. 使用@JvmStatic@Reusable哪个更好?还是一个很好?还是我应该同时使用两者,如果是的话,为什么要同时使用两者?

android kotlin dagger-2
1个回答
0
投票

如果您将模块声明为Kotlin对象,则需要@JvmStatic。该限制已由dagger 2.25删除。您也可以检查this issue了解更多信息。

如果使用Dagger 2.25或更高版本,则不再需要使用@JvmStatic

来自@Reusable文档:

一个指示绑定返回的对象可以(但可能不能)重用的范围。

{{@ code @Reusable}}在您希望限制一种类型的配置的数量时有用,但是没有特定的生存期,只能有一个实例。

如果在多个位置注入相同的东西,并且具有相同的实例不是问题,这可能有助于不为每种用法创建一个新对象。

[@JvmStatic@Reusable彼此无关,根据您的需要,您可以使用其中一个,另一个或两者。

© www.soinside.com 2019 - 2024. All rights reserved.