首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是java.constructors.single()?

什么是java.constructors.single()?
EN

Stack Overflow用户
提问于 2020-10-21 18:03:19
回答 1查看 82关注 0票数 2

我正在学习Kotlin如何对脚本求值,我在BasicJvmScriptEvaluator中看到了如下代码:

代码语言:javascript
复制
    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的包。我应该如何理解这段代码?

EN

回答 1

Stack Overflow用户

发布于 2020-10-21 18:36:03

重要的是要认识到,您是在KClass实例上操作的extension function中。因此,java实际上是对this.java的调用,它返回与KClass关联的java.lang.Class。然后,constructorsClass获取一个Constructor数组,single()获取该数组中的一个元素(否则将抛出异常)。

如果将代码展开为多行,可能会更容易看到发生了什么:

代码语言:javascript
复制
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)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64461190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档