【发布时间】:2022-01-06 22:25:07
【问题描述】:
我想创建哈希图,它可以为任何类型添加价值。 当我得到它时,我想知道我可以投射什么
所以我像这样创建了这个 TypeMap
class TypeMap<K, V, C : Class<*>> {
private var valueMap = HashMap<K, V>()
private var classMap = HashMap<K, C>()
fun getValue(key: K): V? {
return valueMap[key] as V
}
fun getClass(key: K): C? {
return classMap[key]
}
fun put(key:K, value:V, cls:C){
valueMap[key] = value
classMap[key] = cls
}
}
我创建了实例并像这样放置值
var map= TypeMap<String, Any, Class<*>>()
var uData = UserData()
map.put("userName", "Marshall", String::Class.java)
map.put("userData", uData , UserData::Class.java)
并像这样使用它
var name = map.getValue("userName") as map.getClass("userName")
但不能施放
有人有什么好主意吗? 请帮帮我!
【问题讨论】:
-
您创建此地图的用例是什么?
-
您对此有何期待?实际上 Kotlin(如 Java)是一种静态类型语言,这是无效的。如果您知道该类,请用作通用参数,如果您不知道,那将如何帮助您。 (也许你可以在你的代码中使用不同的
is ClassX、is ClassY)
标签: android class kotlin generics casting