如何从字符串转换为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正常工作,该类需要一个可以不带参数的构造函数(因此没有参数,或者所有参数都具有默认值的构造函数)。