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

Вы можете играть с этим здесь.

Ответ 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());