Поле, не объявленное как необязательное, принимает значение NULL - PullRequest
0 голосов
/ 06 июня 2018

У меня есть класс данных

data class Bean {

    var value: String = ""

}

Я получил Json с сервера:

{
    "value":null
}

То, что я ожидаю, так как value не является обязательным, поэтому ноль не может бытьназначен и value останется как "".Но с помощью отладчика я обнаружил, что value равен нулю, и поэтому какой-то метод, который я вызвал, выдает следующее исключение:

fun matches(stringToMatch: String): Boolean {
    return this.value.toLowerCase() == stringToMatch.toLowerCase()
}

kotlin.TypeCastException: null cannot be cast to non-null type java.lang.String

Как я могу сделать value остается ""?

1 Ответ

0 голосов
/ 06 июня 2018

Вы используете библиотеку десериализации JSON (GSON?), Которая создает ваши объекты, полностью обходя встроенную в них инициализацию.Скорее всего, он использует низкоуровневый не-JDK-вызов sun.misc.Unsafe.allocateObject() для выделения блока необработанных данных для вашего объекта, а затем приступает к его заполнению из проанализированного JSON.

Единственный способ действительно исправить это - использоватьтакая библиотека JSON, которая понимает Kotlin и может реплицировать свои правила инициализации объекта.

Кстати, ваш конкретный пример JSON, который явно присваивает null ненулевому свойству, не должен использовать значение по умолчанию, но выбрасыватьисключение проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...