Поле объекта, созданного посредством отражения, не допускающее значения NULL, равно NULL - PullRequest
0 голосов
/ 11 июля 2020

У меня следующая структура класса:

class ExampleResponse(
    @SerializedName("status")
    val status: String
)

Я создаю экземпляр этого класса с помощью отражения:

fun convert(typeAdapterFactory: TypeAdapterFactory, gson: Gson): Optional<*> {
 return try {
            val genericTypeClassName = "com.example.package.ExampleResponse"
            val genericClass = Class.forName(genericTypeClassName)
            val genericTypeAdapter = gson.getDelegateAdapter(typeAdapterFactory, TypeToken.get(genericClass))
            val response = genericTypeAdapter.fromJson("{}")
            Optional.of(response)
        } catch (e: Exception) {
            Optional.empty<Any>()
        }
}

Я жду, что в строке genericTypeAdapter.fromJson("{}") он выбросит исключение, потому что статус будет нулевым. Но я получаю экземпляр ExampleResponse с нулевым полем статуса. Я хочу вернуть Optional.empty (), если статус равен нулю. Как я могу этого добиться, не проверяя поля? (проверка поля на ненулевое значение недопустима, потому что настоящая функция универсальна, и я не знаю, какой класс я здесь получу).

1 Ответ

1 голос
/ 11 июля 2020

Gson не знает, когда поле может / не может быть нулевым, поскольку это Java библиотека, а Java ничего не знает о допустимости пустых значений.

Этот вопрос и ответы предлагают некоторые обходные пути: Gson необязательные и обязательные поля

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