我在自学科特林。我需要基于传入的命令行参数从应用程序动态加载类。在Java中,我这样做:
var cl = App.class.getClassLoader();
var euler = (Euler) cl
.loadClass("com.gorauskas.euler.solutions.Euler" + Util.problem)
.getDeclaredConstructor()
.newInstance();
Euler
是com.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
错误。
更新(2019-09-09 03:20 UTC):
如果我使用as
强制转换运算符,则可以访问实例的成员...
val e: EulerInterface = cl.loadClass(EULER_PACKAGE + EULER_CLASS + problem)
.getDeclaredConstructor()
.newInstance() as EulerInterface
但是这对我来说就像是一种破解...在Kotlin中还有一种更惯用的方法吗?