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