Android SharedPreferences の周りに Kotlin ラッパーを作成しようとしていますが、現在このコードを使用しています。
class KPreferences(ctx: Context) {
val prefs = ctx.getSharedPreferences(ctx.getString(R.string.app_name), Context.MODE_PRIVATE)
fun put(key: String, value: Any): Boolean {
val editor = prefs.edit()
when (value) {
is Boolean -> editor.putBoolean(key, value)
is Float -> editor.putFloat(key, value)
is Int -> editor.putInt(key, value)
is Long -> editor.putLong(key, value)
is String -> editor.putString(key, value)
is Set<*> -> editor.putStringSet(key, value as Set<String>)
}
return editor.commit()
}
これはコンパイルされますが、セットに文字列のみが含まれ、他の型が含まれていないことを確認して、これを改善できない場合は、検索せずにはいられません。
私はこれを試しました:
fun put(key: String, value: Any): Boolean {
val editor = prefs.edit()
when (value) {
is Boolean -> editor.putBoolean(key, value)
is Float -> editor.putFloat(key, value)
is Int -> editor.putInt(key, value)
is Long -> editor.putLong(key, value)
is String -> editor.putString(key, value)
is Set<*> ->
if (value.isEmpty() || value.iterator().next() is String) {
editor.putStringSet(key, value as Set<String>)
}
}
return editor.commit()
}
しかし、それはとてもエレガントではないようです。
他のアプローチは、定義することです
fun put(key: String, value: Set<String>)
私の試みで最後のケースを削除します。ここでエレガントなソリューションが欠けているかどうか疑問に思っています。
ありがとう!