kotlin.reflect.KClass.isInstance (значение: любое?) не работает - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь следовать

"simple string"::class.isInstance(kotlin.String)

Но он возвращает false !

Я использую

"org.jetbrains.kotlin: kotlin-refle: 1.3.21 "

Другие примеры также не работают

1::class.isInstance(kotlin.Int)
true::class.isInstance(Boolean)

Пожалуйста, помогите мне понять это!

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

kotlin.String, kotlin.Int и Boolean используются в качестве значений, поэтому они относятся к сопутствующим объектам соответствующих классов. Поэтому первая строка проверяет, является ли объект-компаньон String String, и правильно говорит, что это не так.

1 голос
/ 28 марта 2019

Вы используете API неправильно, функция isInstance выполняет обратную проверку, как показано в документации:

Возвращает true, если [значение] является экземпляром этого класса на данной платформе.

Строка kotlin.Int не относится к типу, вы пропустите ::class.

Возможное решение - перевернуть объявление:

String::class.isInstance("a string")  /// true
Int::class.isInstance(42) /// true

Вы также можете сравнивать объекты KClass, например, 432::class == Int::class или используйте функции KClass isSubclassOf и isSuperclassOf

...