Ответ 1
В вашем случае рефлексии Java может быть достаточно: вы можете использовать MyClass::class.java
и создать новый экземпляр точно так же, как и при рефлексии Java (см. @IngoKegel answer).
Но если имеется более одного конструктора и вам действительно нужно получить основной (не стандартный по умолчанию), используйте функцию расширения primaryConstructor
extension function of a KClass<T>
. Это часть отражения Котлина, которая не поставляется в kotlin-stdlib
.
Чтобы использовать его, вы должны добавить kotlin-reflect
в качестве зависимости, например, проект в Gradle:
dependencies {
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}
Assuming that there is [TG46], otherwise replace [TG47] with the version you use.
Тогда вы сможете использовать primaryConstructor
, например:
fun <T : Any> construct(kClass: KClass<T>): T? {
val ctor = kClass.primaryConstructor
return if (ctor != null && ctor.parameters.isEmpty())
ctor.call() else
null
}