Что такое 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
получает массив
Constructor
s из
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
(и другие виды).