gpt4 book ai didi

reflection - 创建 KClass 的新实例

转载 作者:IT老高 更新时间:2023-10-28 13:31:29 42 4
gpt4 key购买 nike

我有一个 Kotlin 类,其主要(也是唯一的)构造函数为空。

我有这个类的引用:

val kClass: KClass<MyClass> = MyClass::class

如何使用反射创建此类的实例?

在 Java 中我会做 myClass.newInstance() 但在 Kotlin 中我似乎需要先找到构造函数:

kClass.constructors.first().call()

我在 some bug reports 中看到了 primaryConstructor 的提及但它没有出现在我的 IDE 中。

最佳答案

在您的情况下,Java 反射可能就足够了:您可以使用 MyClass::class.java并以与 Java 反射相同的方式创建一个新实例(参见 @IngoKegel 的答案)。

但如果有多个构造函数并且您确实需要获取主构造函数(不是默认的无参数构造函数),请使用 primaryConstructor KClass<T> 的扩展功能.它是 Kotlin reflection 的一部分,不在 kotlin-stdlib 内发货.

要使用它,您必须添加 kotlin-reflect 作为依赖项,例如Gradle 项目中的一个:

dependencies {
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}

假设有ext.kotlin_version , 否则替换 $kotlin_version与您使用的版本。

然后你就可以使用 primaryConstructor ,例如:

fun <T : Any> construct(kClass: KClass<T>): T? {
val ctor = kClass.primaryConstructor
return if (ctor != null && ctor.parameters.isEmpty())
ctor.call() else
null
}

关于reflection - 创建 KClass 的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40672880/

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