如何从字符串中转换为Kotlin类的接口/类?

时间:2017-07-09 15:25:18

标签: java jvm kotlin

我上了一个Class.forName("classname").kotlin的课程。

我知道这个类实现了一个Interface,这非常简单(如果你的解决方案与我的想法不同,它也会很好用)

interface Runner {
    fun run(): String
}

当我尝试投射我的课程时,要使用该功能,就像这样

val result = (Class.forName("classname").kotlin as Runner).run()

我收到以下错误:

kotlin.reflect.jvm.internal.KClassImpl cannot be cast to Runner

有没有办法让这项工作?我也尝试用Class.forName("classname").kotlin.functions然后尝试从那里执行函数,但我没有成功。

如果你知道这个问题的 Java解决方案(从类名中调用一个函数),那么听到它也可能会很高兴。

1 个答案:

答案 0 :(得分:5)

您遇到的问题是Class.forName("...").kotlin返回KClass,只有代表一个类,并且不是您引用的类的实例。要创建该类的实例,可以使用createInstance()

val kclass = Class.forName("classname").kotlin
val instance = kclass.createInstance() as Runner

println(instance.run())

请注意,要使createInstance起作用,该类需要一个可以不带参数调用的构造函数(所以没有参数,或者一个参数的所有参数都有默认值)。