根据参数值动态加载Kotlin类

时间:2019-09-09 02:50:16

标签: kotlin

我在自学科特林。我需要基于传入的命令行参数从应用程序动态加载类。在Java中,我这样做:

var cl = App.class.getClassLoader();
var euler = (Euler) cl
        .loadClass("com.gorauskas.euler.solutions.Euler" + Util.problem)
        .getDeclaredConstructor()
        .newInstance();

Eulercom.gorauskas.euler.solutions包中所有类都实现的接口,而Util.problem是在命令行中传递的int ...(code here

如何像上面的Java示例一样在Kotlin中动态加载类?

我尝试了以下方法:

val cl = this.javaClass.classLoader
val e = cl.loadClass("com.gorauskas.euler.solutions.Euler" + problem)
    .getDeclaredConstructor()
    .newInstance()

而且我可以在IntelliJ中看到实例的属性,但是例如,我无法通过使用e.problem访问这些属性,而是出现了Unresolved reference错误。

enter image description here

更新(2019-09-09 03:20 UTC):

如果我使用as强制转换运算符,则可以访问实例的成员...

val e: EulerInterface = cl.loadClass(EULER_PACKAGE + EULER_CLASS + problem)
    .getDeclaredConstructor()
    .newInstance() as EulerInterface 

但是这对我来说就像是一种破解...在Kotlin中还有一种更惯用的方法吗?

0 个答案:

没有答案