如何从字符串转换为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解决方案 (从类名称中调用一个函数),那么也可以很高兴地听到这个问题。
您遇到的问题是Class.forName("...").kotlin
返回一个KClass
,它只代表一个类,而不是您引用的类的实例。 要创建该类的实例,可以使用createInstance()
:
val kclass = Class.forName("classname").kotlin val instance = kclass.createInstance() as Runner println(instance.run())
请注意,要使createInstance
正常工作,该类需要一个可以不带参数的构造函数(因此没有参数,或者所有参数都具有默认值的构造函数)。