Как я могу создать условие для проверки класса, используемого для создания экземпляра KClass в Kotlin - PullRequest
0 голосов
/ 08 ноября 2019

В приведенном ниже коде я хочу знать, какой класс использовался для создания экземпляра KClass. В случае с массивом я нашел способ использования java.IsArray, но как это сделать для других случаев?

fun main() {

    val myKClassList = listOf(String::class, Array<String>::class, Int::class)

    myKClassList.forEach {
            if (it.java.isArray) println("Array")
            else if (??) println("String")
            else if (??) println("Int")
    }
}

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

Если вам нужно только строковое представление, вы можете использовать свойство simpleName или qualifiedName:

for (it in myKClassList) {
    println(it.simpleName)
}

Если вам нужен реальный класс, он у вас уже есть - это KClassэкземпляр. Поэтому, если вы делаете что-то на основе типа:

for (it in myKClassList) {
    when (it) {
        Array<String>::class -> println("String array")
        String::class -> println("String")
        Int::class -> println("Int")
        //etc.
    }
}

Редактировать Если вы хотите обрабатывать все типы массивов одинаково, мы смешиваем типы условий, поэтому вам нужно when без аргумента:

for (it in myKClassList) {
    when {
        it.java.isArray -> println("Array")
        it == String::class -> println("String")
        it == Int::class -> println("Int")
        //etc.
    }
}
0 голосов
/ 08 ноября 2019

Если вы ищете проверку типа экземпляра, рассмотрите is:

when (it) {
    is Int -> println("Int")
    is String -> println("String")
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...