Как включить generi c types <T>на android studio - PullRequest
0 голосов
/ 15 апреля 2020

Я программирую на kotlin, и я попытался использовать Hashmap, однако это дает мне ошибку: Неразрешенная ссылка, я попытался импортировать java .lang.reflect. *; но это не помогает

вот мой код (IDE не распознает T):

    fun updateValues(map:HashMap<String,T>){
            map.keys.forEach { key->{
                when(map[key]){
                    is String-> sharedPrefrences.edit().putString(key,map[key])
                    is Integer-> sharedPrefrences.edit().putInt(key,map[key])
                }
            } }
            sharedPrefrences.edit().apply()
        }

Ответы [ 3 ]

2 голосов
/ 15 апреля 2020

Вам необходимо указать параметр типа для вашей функции, например,

fun <T> updateValues(map:HashMap<String,T>){ ...
0 голосов
/ 15 апреля 2020

Нет необходимости использовать здесь дженерики, потому что SharedPreferences по-прежнему не сможет приводить значение в вашем блоке when.

Здесь решение без явного приведения или дженериков:

fun updateValues(map:HashMap<String,*>) {
    map.keys.forEach { key ->
        with(map[key]) {
            when (this) {
                is String -> sharedPrefrences.edit().putString(key, this)
                is Int -> sharedPrefrences.edit().putInt(key, this)
            }
        }
    }
    sharedPrefrences.edit().apply()
}
0 голосов
/ 15 апреля 2020

Если T требуется только для этой функции, вам необходимо иметь правильно объявленную Generi c функцию : https://kotlinlang.org/docs/reference/generics.html#generic -функций

fun <T> updateValues(map: HashMap<String,T>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...