Получить тип переменной в Kotlin

Как я могу найти тип переменной в Kotlin? На яве есть instanceof, но котлина не существует

val properties = System.getProperties() // Which type?

5 ответов

Решение

Вы можете использовать отражение, чтобы сделать это:

val widget = ...
println("${widget::class.qualifiedName}") // with package name or...
println("${widget::class.simpleName}")    // ... only class name

Пожалуйста, обратите внимание:

На платформе Java компонент времени выполнения, необходимый для использования функций отражения, распространяется в виде отдельного файла JAR (kotlin-refle.jar). Это сделано для уменьшения необходимого размера библиотеки времени выполнения для приложений, которые не используют функции отражения. Если вы используете отражение, убедитесь, что файл.jar добавлен в путь к классам вашего проекта.

Источник: https://kotlinlang.org/docs/reference/reflection.html

Для проверки определенного типа вы можете использовать is оператор.

if(widget is Widget) {
   // ...
}

Вы можете использовать это так:

      val value="value"
println(value::class.java.typeName)

вы можете получить имя класса с помощью properties::class.simpleName

Всего лишь незначительная деталь между упомянутыми ответами.

      var x = "X"
println(x::class.simpleName) // prints String

Этот код использует Reflection под капотом, когда вы декомпилируете его в байт-код Java, и он выглядит так:Reflection.getOrCreateKotlinClass(x.getClass()).getSimpleName()

      var y = "Y"
println(y.javaClass.simpleName) // prints String

И это будет компилироваться вy.getClass().getSimpleName()и это примерно на 50 миллисекунд быстрее.

Если вам нужен тип класса в Kotlin (в отличие от Java):

      val value="value"
println(value::class)
Другие вопросы по тегам