class Remember private constructor() {
private var data: ConcurrentMap<String, Any> = ConcurrentHashMap()
private fun <T> saveValue(key: String, value: T): Remember {
data[key] = value
return this
}
private fun <T> getValue(key: String, clazz: Class<T>): T? {
val value = data[key]
var castedObject: T? = null
//Failed here
if (clazz.isInstance(value)) {
castedObject = clazz.cast(value)
}
return castedObject
}
fun putInt(key: String, value: Int): Remember {
return saveValue(key, value)
}
fun getInt(key: String, fallback: Int): Int {
val value = getValue(key, Int::class.java)
return value ?: fallback
}
}
Когда I putInt(key, 123)
, 123
автоматически устанавливается на java.lang.Integer
.Когда я получаю значение из Map
, как мне сравнить value
, набранный Any
с Class<T>
, в котором T в данном случае равно Int:class.java
?В настоящее время clazz.isInstance(value)
всегда терпит неудачу.Это работает, если этот класс написан на Java