Kotlin – 如何根据类型查找和投射元素

我有继承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 } } 

这应该为你工作:

 open class GameObjectImpl : GameObject { val attachedComponents = mutableSetOf<Component>() override inline fun <reified TComponent : Component> getComponent(type: KClass<TComponent>): TComponent? { return attachedComponents.filterIsInstance<TComponent>().firstOrNull() } }