Получить тип переменной в 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)