在纯 Kotlin 中,我能否通过类名实例化一个对象?

10

以下纯 Kotlin 代码与下列 Java 代码等效:

Class.forName(className).newInstance()

假设我们在一个 Kotlin 多平台项目中。

2个回答

5

对于在JVM上编译的Kotlin程序,这段代码可以直接使用,因为Kotlin编译成的JVM类可以通过Java反射机制调用,所以同样适用于Kotlin。

但是,在其他Kotlin平台(如Kotlin/JS、Kotlin/Native)中,目前还没有适当的反射支持,因此在运行时不能使用该代码。


没错,它在JVM上运行,但是截至今天(2023年),方法Class.newInstance()已经被弃用了。 - undefined

-1
没有多平台解决方案,但是对于JAVA,你应该从已声明的构造函数中创建一个新的实例:
Class.forName(className).getDeclaredConstructor().newInstance()

如其他答案所解释的,这在Kotlin上除了Java平台之外是行不通的。自那个答案以来有所改变吗?如果是的话,请解释为什么/如何现在可以运行。 - undefined
2018年的答案没有解释“这行代码”今天使用了不推荐的方法。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接