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は!
