Как я могу использовать getInstance в Kotlin? - PullRequest
0 голосов
/ 23 апреля 2020

Я не могу использовать createInstance(). Например, Foo::class.createInstance()

У меня есть проект gradle с использованием плагина Kotlin 1.3.70 kotlin("jvm") version "1.3.70". и имеют в моих зависимостях implementation(kotlin("stdlib-jdk8")) и implementation(kotlin("reflect")).

Кто-нибудь знает, почему эта функция отсутствует?

У меня есть функция, которая получает classType: KClass<Foo>, и я хочу создайте экземпляр Foo с помощью конструктора noarg.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Я обновил версию плагина Kotlin и удалил ее кэшем Gradle, и теперь он, кажется, работает.

0 голосов
/ 23 апреля 2020

Для использования Java отражения (например, newInstance()) вам необходимо получить доступ к соответствующему Java классу :

fun createInstance(classType: KClass<Foo>): Foo = classType.java.newInstance()

Но Kotlin предоставляет createInstance () как лучшая альтернатива для этого варианта использования:

Создает новый экземпляр класса, вызывая конструктор, который либо не имеет параметров, либо все параметры которого являются необязательными.

fun createInstance(classType: KClass<Foo>): Foo = classType.createInstance()
...