Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于参数值动态加载Kotlin类_Kotlin - Fatal编程技术网

基于参数值动态加载Kotlin类

基于参数值动态加载Kotlin类,kotlin,Kotlin,我在自学科特林。我需要根据传入的命令行参数从我的应用程序动态加载一个类。在Java中,我执行以下操作: var cl = App.class.getClassLoader(); var euler = (Euler) cl .loadClass("com.gorauskas.euler.solutions.Euler" + Util.problem) .getDeclaredConstructor() .newInstance(); 其中,Eul

我在自学科特林。我需要根据传入的命令行参数从我的应用程序动态加载一个类。在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。。。()

如何像上面的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
中的类型,但除此之外,您正在按照我所能想象的惯用方式进行操作。