我正在尝试围绕 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()
}
这可以编译,但如果我不能通过确保 Set 仅包含 String 而没有其他类型来使其变得更好,我会忍不住搜索。
我试过这个:
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>)
并删除我尝试的最后一个案例。我只是想知道我是否在这里遗漏了任何优雅的解决方案。
谢谢!