Kotlin 使用包含包名和类名的字符串创建类实例

Kotlin 使用包含包名和类名的字符串创建类实例,kotlin,Kotlin,在Kotlin中,是否可以通过只提供包含包名和类名的字符串来创建类的实例?我知道这可以通过Java实现: Class<?> clazz = Class.forName("com.mydomain.myapp.someclass"); Constructor<?> ctor = clazz.getConstructor(String.class); Object object = ctor.newInstance(new Object[] { ctorArgument })

在Kotlin中,是否可以通过只提供包含包名和类名的字符串来创建类的实例?我知道这可以通过Java实现:

Class<?> clazz = Class.forName("com.mydomain.myapp.someclass");
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
但是有没有比Kotlin更为土生土长的东西呢?

找到了答案:

将以下内容添加到build.gradle:

implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
按如下方式创建实例:

val classInstance = Class.forName("com.mydomain.myapp.someclass").kotlin.objectInstance
给你一个KClass,你可以在中找到它支持的所有东西。例如,如果您知道这是一个带有主构造函数的Kotlin类,您可以这样做

val ctor = cls.primaryConstructor!!
val object = ctor.call(ctorArgument)

或者从cls.constructors中选择所需的构造函数。

这不会像Java代码那样创建实例;这仅在声明为对象并返回该对象时才有效。
val ctor = cls.primaryConstructor!!
val object = ctor.call(ctorArgument)