KotlinでPreferencesクラスをシングルトンで。

AndroidのSharedPreferencesみたいなのはないのかなー?と思っていたら、@skrbさんにあることを教えてもらいました。java.util.prefs.Preferences。そのまんまやった…。

これを使って設定用クラスをKotlinで書いてみた。ついでにシングルトンにしつつ、項目をプロパティ(メンバ変数)として扱えるようにしてみた。
見た目がカッコいい。Javaで同じ事をしようと思ったら、setter, getterメソッドだらけになるけど、Kotlinならその辺りを隠蔽できる。(やってることは同じなんだけど)

object ProjectPreferences {
    val UPDATE_INTERVAL_SECONDS = "UpdateIntervalSeconds"
    val START_WITH_CHECK = "startWithCheck"

    val prefs by Delegates.lazy { java.util.prefs.Preferences.userRoot()!!.node("ProjectName") }

    var updateIntervalSeconds: Int
        set(seconds: Int) = prefs.putInt(UPDATE_INTERVAL_SECONDS, seconds)
        get() = prefs.getInt(UPDATE_INTERVAL_SECONDS, 3600)

    var startWithCheck: Boolean
        set(check: Boolean) = prefs.putBoolean(START_WITH_CHECK, check)
        get() = prefs.getBoolean(START_WITH_CHECK, false)
}

こう書く事で、

ProjectPreferences.updateIntervalSeconds

で値を取得できるし、

ProjectPreferences.updateIntervalSeconds = 300

で値を設定できる。startWithCheckも同様に = trueとかで値を設定できる。

見た目が綺麗になるし、コード量も減るからいいね!Kotlinは!


タグ Java, Kotlin | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です