gpt4 book ai didi

java - Kotlin 反射问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:06 24 4
gpt4 key购买 nike

我在 Java 库中声明了这些方法:

引擎.java:

public <T extends EntitySystem> T getSystem(Class<T> systemType)

实体.java:

public <T extends Component> T getComponent(Class<T> componentClass)

现在,我经常使用这些方法,我真的很想使用 MyComponent::class (即 kotlin 反射)而不是更冗长的 javaClass<MyComponent>()无处不在。

我的 EntitySystemComponent实现是用 Kotlin 编写的。

所以我想我会创建扩展函数,它采用 KClasses相反,但我不太确定如何让它们工作。

类似...

public fun <C : Component> Entity.getComponent(type: KClass<out Component>): C {
return getComponent(type.javaClass)
}

但是由于以下几个原因这不起作用:编译器说类型推断失败,因为 javaClass返回 Class<KClass<C>> .我需要 Class<C> .我也不知道如何使该方法正确通用。

谁能帮我创建这些方法?

最佳答案

在当前的 Kotlin (1.0) 中,代码会更简单:

public inline fun <reified C : Component> Entity.getComponent(): C {
return getComponent(C::class)
}

并且可以调用:

val comp: SomeComponent = entity.getComponent()

在类型推断起作用的地方,具体化泛型类型参数(包括任何嵌套的泛型参数)并调用方法,该方法然后使用类型参数作为类引用。

关于java - Kotlin 反射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com