在Kotlin中是否可以通过仅提供包含包名和类名的字符串来创建类的实例?我知道可以使用Java完成此操作:
Class<?> clazz = Class.forName("com.mydomain.myapp.someclass");
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
但是Kotlin是否还有其他本机?
答案 0 :(得分:1)
val cls = Class.forName("com.mydomain.myapp.someclass").kotlin
给您一个KClass<*>
,您可以在https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/index.html中找到它支持的所有内容。如果例如您知道这是带有主要构造函数的Kotlin类,您可以这样做
val ctor = cls.primaryConstructor!!
val object = ctor.call(ctorArgument)
或者从cls.constructors
中选择所需的构造函数。
答案 1 :(得分:0)
想通了:
在build.gradle中添加以下内容:
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
创建实例如下:
val classInstance = Class.forName("com.mydomain.myapp.someclass").kotlin.objectInstance