我有一个继承Component
的对象集合,我想要一个函数,通过它的具体类找到一个对象并返回它。
但是Kotlin并不喜欢我所做的演员,并且添加@Suppress("UNCHECKED_CAST")
很难看。
我有以下代码:
open class GameObjectImpl : GameObject {
private val attachedComponents = mutableSetOf<Component>()
@Suppress("UNCHECKED_CAST")
override fun <TComponent : Component> getComponent(type: KClass<TComponent>): TComponent? {
return attachedComponents.find { type.isInstance(it) } as? TComponent
}
}
答案 0 :(得分:4)
这应该适合你:
open class GameObjectImpl : GameObject {
val attachedComponents = mutableSetOf<Component>()
override inline fun <reified TComponent : Component> getComponent(type: KClass<TComponent>): TComponent? {
return attachedComponents.filterIsInstance<TComponent>().firstOrNull()
}
}