27

シングルトンを定義するには、Kotlin オブジェクト宣言を使用するか、通常の Kotlin クラスを作成し、dagger を使用して注入する必要がありますか? 私の意見では、最初のオプションの方が間違いなく簡単ですが、この状況で短剣を使用する理由があるかもしれませんが、私にはわかりません。

オプション 1 (通知objectキーワード):

object SomeUtil {
    // object state (properties)

    fun someFunction(number: Long) {
        // ...
    }
}

オプション 2 (通知classキーワード):

class SomeUtil {
    // object state (properties)

    fun someFunction(number: Long) {
        // ...
    }
}
@Module
class AppModule {

    @Provides
    @Singleton
    internal fun provideTheUtil() = SomeUtil()
}
class MainActivity : BaseActivity() {

    @Inject internal lateinit var util: SomeUtil
}

更新 2019-07-03

@Blackbelt はコメントで、テスト容易性のためにオプション 2 を優先すべきだと述べました。しかし、MockKのようなライブラリはsをモックobjectすることもできます。それでも、オプション 2 が望ましいと思いますか?

4

2 に答える 2