我上了一个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解决方案(从类名中调用一个函数),那么听到它也可能会很高兴。
答案 0 :(得分:5)
您遇到的问题是Class.forName("...").kotlin
返回KClass
,只有代表一个类,并且不是您引用的类的实例。要创建该类的实例,可以使用createInstance()
:
val kclass = Class.forName("classname").kotlin
val instance = kclass.createInstance() as Runner
println(instance.run())
请注意,要使createInstance
起作用,该类需要一个可以不带参数调用的构造函数(所以没有参数,或者一个参数的所有参数都有默认值)。