Я пытаюсь написать несколько Котлин обертку Android SharedPreferences и у меня этот код прямо сейчас:испытания типа элемента контейнера в Котлин
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>)
и удалить последний случай в моей попытке. Мне просто интересно, нет ли здесь какого-либо элегантного решения.
Спасибо!
добавьте тег 'Android' на свой вопрос –
Я не согласен, потому что вопрос действительно касался проверки типа Котлина. Кажется, я встречаюсь с ним в разработке Android, но это совпадение. В любом случае, я добавляю тег, чтобы сделать вас счастливым :) –
или удалить ссылки на Android, а Android-код упрощает все это только в соответствующей части. :-) в любом случае меня радует. –