使用包含程序包名称和类名称的字符串创建类实例

时间:2019-12-10 08:07:45

标签: 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是否还有其他本机?

2 个答案:

答案 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