Что такое java.constructors.single()?

Я изучаю 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. Как мне понять этот код?

1 ответ

Важно понимать, что вы используете функцию расширения, работающую с экземпляром KClass. Так что java на самом деле призыв к this.java который возвращает java.lang.Class связанный с KClass. Затем constructors получает массив Constructors из Class и 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() функция это функция расширения, определенная на Array(и другие виды).

Другие вопросы по тегам