如何从String转换为Kotlin类的接口/类?

cre*_*not 3 java jvm kotlin

我上课了Class.forName("classname").kotlin.

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

interface Runner {
    fun run(): String
}
Run Code Online (Sandbox Code Playgroud)

当我尝试演示我的类时,要使用这个函数

val result = (Class.forName("classname").kotlin as Runner).run()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

kotlin.reflect.jvm.internal.KClassImpl cannot be cast to Runner
Run Code Online (Sandbox Code Playgroud)

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

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

zsm*_*b13 5

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

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

println(instance.run())
Run Code Online (Sandbox Code Playgroud)

请注意,为了createInstance工作,该类需要一个可以不带参数调用的构造函数(因此没有参数的参数,或者具有所有参数的默认值的参数).