1
0

More than 3 years have passed since last update.

VLC for AndroidのSingletonHolderについて

Last updated at Posted at 2021-03-19

はじめに

VLC for Androidのリポジトリ周りのソースを見ているとSingletonHolderというクラスを見つけたので調べてみた。

各種リンク

アプリ
GitHub
公式サイト

ソースコード

↓。コンストラクで生成するクロージャを渡して、初回アクセス時はそれを使ってインスタンスを生成して渡すようにしているのがポイント。後はスレッドセーフを保証。

open class SingletonHolder<T, in A>(creator: (A) -> T) {
    private var creator: ((A) -> T)? = creator
    @Volatile var instance: T? = null

    fun getInstance(arg: A) = instance ?: synchronized(this) {
        val i2 = instance
        if (i2 != null) i2
        else {
            val created = creator!!(arg)
            instance = created
            creator = null
            created
        }
    }
}

他のアプリのソース

WIP

まとめ

別にこんなクラスはなくてもいいような気がするけど、ポカミスを避ける意味はあるのか? 
後はDIを使いたくないとか。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0