Проблема с защитой класса Kotlin для Android

Когда я хочу получить значение int из sharedpreferences, я получаю UnsupportedOperationException Но я показываю из logcat, этот класс – Int . Что не так?

 operator inline fun <reified T : Any> get(@XMLS xml: String, @KEYS key: String, defaultValue: T? = null): T { Timber.d("${T::class} + $xml + $key + $defaultValue") return when (T::class) { String::class -> getShared(xml)?.getString(key, defaultValue as? String ?: "") as? T ?: "" as T Int::class -> { Timber.d("not triggered") //<< getShared(xml)?.getInt(key, defaultValue as? Int ?: -1) as? T ?: -1 as T } Boolean::class -> getShared(xml)?.getBoolean(key, defaultValue as? Boolean == true) as? T ?: true as T Float::class -> getShared(xml)?.getFloat(key, defaultValue as? Float ?: -1f) as? T ?: -1f as T Long::class -> getShared(xml)?.getLong(key, defaultValue as? Long ?: -1) as? T ?: -1 as T else -> throw UnsupportedOperationException("unknown class!") } } 

Выходы:

 class kotlin.Int + application_data + Ver + null 

Это не работает, потому что Int::class – это примитивный int а T::class – это boxed type java.lang.Integer . KClass для них обоих выглядит как kotlin.Int так что трудно сказать разницу.

Это работает, хотя выглядит немного странно:

 when (T::class) { Int::class, Integer::class -> } 

(Я оставил Int там для ясности, хотя он никогда не срабатывает.)