Я начинаю переходить с java на kotlin. У меня есть следующий класс данных:
data class NetworkResponse constructor(val title: String)
Этот класс будет позже использоваться GSON
для преобразования json в объект этого класса. но есть вероятность, что title
может получить null
.
В java Это не было проблемой во время преобразования из json в объект (но поскольку я не использую нотацию ?
со строкой, это может быть), но это определенно проблема при хранении данных в Room
db, потому что там я не хочу добавлять нулевые значения, и я использую тот же класс, что и @Entity
.
в java, я использовал makeadd logi c для преобразования значения null в Some (например, uuid) в установщиках, но здесь я не могу сделать это, потому что конструктор не имеет тела и я должен использовать init
, что означает, что я должен объявить свои переменные вне конструктора, что также не относится к классу data
. Что я могу сделать, чтобы:
- У меня все еще есть
data
класс - У меня есть все мои переменные только в конструкторе
- У меня есть все мои переменные только с типом
T
, но не T?
(т. е. не обнуляемым) - при преобразовании объекта JSONString в объект класса Response, я могу создать уникальный экземпляр даже для данных, допускающих значение NULL (например, если я получаю переменную
id
как ноль, я все еще могу создать экземпляр, и лог c должен работать так: if value==null, return <results from my logic for creating a random id>
- Я должен иметь больший контроль над определением логики преобразования, указанной в пункте 4 (например, для Если
id
получает null
, я могу использовать сложные логики c для генерации уникального идентификатора, но если, скажем, img_url
получает null
, я могу просто сохранить его как "no data"
(т.е. несколько логик для другой тип нулевого преобразования)) - Я бы предпочел, если бы эта проблема решалась с помощью kotlin, а не с помощью хакеров сторонних разработчиков из
Gson
или Room