如何从字符串转换为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
正常工作,该类需要一个可以不带参数的构造函数(因此没有参数,或者所有参数都具有默认值的构造函数)。
- JSON到HashMap与使用Gson的对象
- NoClassDefFoundError okhttp3.internal.io.FileSystem
- ProcessBuilder无法找到路径中的Kotlin
- 在android kotlin中,使用步进库将自定义单选按钮值传递给多个片段,以便在摘要页面上使用
- 从Java转换到Kotlin时出错。 错误 – org.gradle.api.tasks.TaskExecutionException:任务执行失败:app:compileDebugKotlin'
- Kotlin中的新操作符(语法)
- 如何创建Android Facebook密钥哈希?
- JavaFX,JavaScript控制台日志记录和框架(Vue.js)
- 在Kotlin中可以使用Mockito吗?