Как отразить пустые поля в Kotlin - PullRequest
1 голос
/ 11 февраля 2020

Я хочу проверить, присваивается ли мое поле типу. В моем классе, который я отражаю, некоторые поля обнуляются (скажем, String?), но когда я проверяю это с помощью отражения:

if(field.type.isAssignableFrom(String::class.java)) {...}

, это всегда ложно. Можно ли отразить пустые поля в Kotlin?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2020

ну, это случается и для других типов, Boolean ?, Double? et c

Как описано в документации Kotlin для базовых c типов :

на платформе Java, числа физически хранятся в виде примитивных типов JVM, , если только нам не нужна ссылка на обнуляемое число (например, Int?) или не используются дженерики. В последних случаях числа заключены в квадрат.

Так что field.type для Boolean? - это java.lang.Boolean, но Boolean::class.java - это примитивный тип boolean. Используйте java.lang.Boolean::class.java или Boolean::class.javaObjectType, и сравнение будет успешным (но не для полей Boolean, которые не могут иметь значение NULL!). То же самое относится к типам чисел и Char.

0 голосов
/ 11 февраля 2020

Да, это возможно! Реализация, которую я придумал:

    fun isFieldOfClassNullable(property: KMutableProperty1<*, *>, comparedClass: KClass<*>): Boolean {
    val comparedReturnType = comparedClass.createType()
    return property.returnType.isSupertypeOf(comparedReturnType)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...