我正在学习Kotlin如何对脚本求值,我在BasicJvmScriptEvaluator中看到了如下代码:
val ctor = java.constructors.single()
val saveClassLoader = Thread.currentThread().contextClassLoader
Thread.currentThread().contextClassLoader = this.java.classLoader
return try {
ctor.newInstance(*args.toArray())
} finally {
Thread.currentThread().contextClassLoader = saveClassLoader
}我不理解代码java.constructors.single(),没有名为java.constructors的包。我应该如何理解这段代码?
发布于 2020-10-21 18:36:03
重要的是要认识到,您是在KClass实例上操作的extension function中。因此,java实际上是对this.java的调用,它返回与KClass关联的java.lang.Class。然后,constructors从Class获取一个Constructor数组,single()获取该数组中的一个元素(否则将抛出异常)。
如果将代码展开为多行,可能会更容易看到发生了什么:
val clazz: java.lang.Class = this.java // 'this' is an instance of kotlin.reflect.KClass
val ctors: kotlin.Array<Constructor> = clazz.constructors
val ctor: java.lang.reflect.Constructor = ctors.single()single()函数是an extension function defined on Array (and other types)。
https://stackoverflow.com/questions/64461190
复制相似问题