Júl*_*ira 5 generics types casting kotlin
我想创建一个通用的“查找”方法,该方法查找提供的实现密封类的实体并返回它,而不必重复多态性。
我想做这样的事情,但我还没有找到一种方法来满足我想要的一切并编译。
sealed class Spell(val id: Long)
class Fireball(id: Long, val name: String): Spell(id)
class Storm(id: Long, val size: String): Spell(id)
inline fun <reified T: Spell> find(id: Long): T =
when (T) {
Fireball -> Fireball(id, "fireball")
Storm -> Storm(id, "3 acres")
}
fun main() {
find<Fireball>(3)
}
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
inline fun <reified T : Spell> find(id: Long): T =
when (T::class) {
Fireball::class -> Fireball(id, "fireball")
Storm::class -> Storm(id, "3 acres")
else -> throw IllegalStateException()
} as T
Run Code Online (Sandbox Code Playgroud)