我上课了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解决方案(从类名调用一个函数),那么听到它也许会很高兴.
您遇到的问题是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工作,该类需要一个可以不带参数调用的构造函数(因此没有参数的参数,或者具有所有参数的默认值的参数).
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |