基于参数值动态加载Kotlin类
我在自学科特林。我需要根据传入的命令行参数从我的应用程序动态加载一个类。在Java中,我执行以下操作:基于参数值动态加载Kotlin类,kotlin,Kotlin,我在自学科特林。我需要根据传入的命令行参数从我的应用程序动态加载一个类。在Java中,我执行以下操作: var cl = App.class.getClassLoader(); var euler = (Euler) cl .loadClass("com.gorauskas.euler.solutions.Euler" + Util.problem) .getDeclaredConstructor() .newInstance(); 其中,Eul
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。。。()
如何像上面的Java示例那样在Kotlin中动态加载类
我尝试了以下方法:
val cl = this.javaClass.classLoader
val e = cl.loadClass("com.gorauskas.euler.solutions.Euler" + problem)
.getDeclaredConstructor()
.newInstance()
我可以在IntelliJ中看到实例的属性,但是我不能使用e.problem
访问属性,例如,我得到了一个未解决的引用
错误
更新(2019-09-09 03:20 UTC):
如果我使用as
casting操作符,那么我可以访问实例的成员
val e: EulerInterface = cl.loadClass(EULER_PACKAGE + EULER_CLASS + problem)
.getDeclaredConstructor()
.newInstance() as EulerInterface
但这对我来说就像是一个黑客。。。在Kotlin中有没有更惯用的方法来实现这一点?在我看来很惯用。您不再需要
val
中的类型,但除此之外,您正在按照我所能想象的惯用方式进行操作。这在我看来很惯用。您不再需要val
中的类型,但除此之外,您正在按照我所能想象的惯用方式进行操作。