2018年03月03日

Kotlinで引数を渡せるシングルトンの作り方

Androidアプリ開発のためのKotlin実践プログラミング

新品価格
¥3,024から
(2018/3/3 07:39時点)



Kotlinでシングルトン作るならobjectで宣言する方法が取られる
ただしobjectで実装すると、初期化時に引数渡したい場合困る
今回はパラメーター渡してのシングルトンの書き方を調べてみた

・Java
Javaでよくあるシングルトン

public class BBB {
private static BBB ccc;

private BBB(@NonNull Context context) {
aaa = aaa(context)
}

public static BBB createInstance(@NonNull Context context) {
if (ccc == null) {
ccc = new BBB(context);
}
return ccc;
}
}



・Kotlin
調べたみたところ以下で書き換えるのが正攻法っぽい

class BBB private constructor(context: Context) {
init {
val aaa = aaa(context)
}

companion object {
@Volatile
private var ccc: BBB? = null

fun createInstance(context: Context): BBB =
ccc ?: synchronized(this) {
ccc ?: BBB(context).also { ccc = it }
}
}
}

Googleが書いたコードを参考にしました
https://stackoverflow.com/questions/40398072/singleton-with-parameter-in-kotlin


・Kotlinのコードの説明
init コンストラクタで初期化の処理
@Volatile writes to this field are immediately made visible to other threads
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-volatile/index.html
synchronizedはlockだよね
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/synchronized.html
also 引数として受け取った値にしたいして関数を実行する
https://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691e


これで一旦うまく行きましたとさ
Kotlin綺麗にかけるんだけど
Javaからの移行だと結構めんどくさいですね
まだまだ続くよ


タグ:java
posted by マスタカ at 07:40 | Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。