Kotlin получает тип как строку
Я не могу найти, как получить тип переменной (или константы) как String
, например typeof(variable)
, с языком Kotlin. Как это сделать?
Ответы
Ответ 1
Вы можете использовать один из методов, который наилучшим образом соответствует вашим потребностям:
val obj: Double = 5.0
System.out.println(obj.javaClass.name) // double
System.out.println(obj.javaClass.kotlin) // class kotlin.Double
System.out.println(obj.javaClass.kotlin.qualifiedName) // kotlin.Double
Вы можете играть с этим здесь.
Ответ 2
Type Checks and Casts: 'is' и 'as'
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // same as !(obj is String)
print("Not a String")
}
Ответ 3
Есть более простой способ, используя свойство simpleName
и избегая префикса Kotlin.
val lis = listOf(1,2,3)
lis
относится к типу ArrayList
. Так что можно использовать
println(lis.javaClass.kotlin.simpleName) // ArrayList
или, более элегантно:
println(lis::class.simpleName) // ArrayList
Ответ 4
Вы ищете оператора instanceof
Ключевое слово instanceof можно использовать для проверки, имеет ли объект определенный тип
String s = "Hello";
if (s instanceof java.lang.String) {
System.out.println("is a String"); //this prints out
}
Чтобы получить информацию о классе объекта, вызовите метод getClass
который имеет каждый отдельный объект (он находится в Object
суперкласса). Это возвращает объект class
(немного запутанный, я знаю). Оттуда вы можете вызвать getName
или getCanonicalName
(узнайте здесь различия). Таким образом, ваш код будет выглядеть так:
System.out.println(this.getClass().getName());