Android 我如何处理Kotlin中GSON的空案例?

Android 我如何处理Kotlin中GSON的空案例?,android,kotlin,gson,android-room,Android,Kotlin,Gson,Android Room,我开始从Java过渡到Kotlin。我有以下数据类: 数据类网络响应构造函数(val title:String) 该类稍后将被GSON用于将JSON文件转换为该类的对象。但是,title可能会收到一个null 在Java中,从JSON转换为object时,这并不是一个问题(但由于我没有使用带字符串的?符号,所以可能是),但是在房间数据库中存储数据时,这肯定是一个问题,因为我不想在那里添加空值,而且我使用的是与@实体相同的类 在Java中,我曾经在setters中创建将null转换为某个值(比如

我开始从Java过渡到Kotlin。我有以下数据类:

数据类网络响应构造函数(val title:String)
该类稍后将被
GSON
用于将JSON文件转换为该类的对象。但是,
title
可能会收到一个
null

在Java中,从JSON转换为object时,这并不是一个问题(但由于我没有使用带字符串的
符号,所以可能是),但是在
房间
数据库中存储数据时,这肯定是一个问题,因为我不想在那里添加空值,而且我使用的是与
@实体
相同的类

在Java中,我曾经在setters中创建将null转换为某个值(比如uuid)的add逻辑,但在这里我不能这样做,因为构造函数没有主体,我必须使用
init
,这意味着我必须在构造函数之外声明变量,这也不是
data
类的情况。我可以做些什么,以便:

  • 我还有一门
    data
  • 我只有构造函数中的所有变量
  • 我所有的变量类型都是
    T
    ,而不是
    T?
    (即不可为空)
  • 当将JSONString转换为响应类的对象时,我甚至可以为可为null的数据创建一个唯一的实例(比如,如果我将变量
    id
    设置为null,我仍然可以创建一个实例,并且逻辑应该运行
    如果value==null,则返回
  • 我应该对定义第4点所述的转换逻辑有更多的控制权(例如,如果
    id
    接收
    null
    ,我可以使用复杂的逻辑来生成唯一的id,但是如果说
    img\u url
    接收
    null
    ,我可以简单地将其存储为
    “无数据”
    (即,用于不同类型的零转换的多个逻辑)
  • 我更希望通过Kotlin解决此问题,而不是通过
    Gson
    Room

  • 如果某个响应参数类型有可能为null,则必须选择以下选项之一:

  • 将类型更改为nullable,以便:

    数据类网络响应构造函数(val title:String?

  • 设置参数的默认值,如下所示:

    数据类网络响应构造函数(val title:String=”“)

  • 如果要在该值为null时使用更高级的逻辑,还可以注册一个
    JsonDeserializer
    ,并编写逻辑以将null/empty值转换为您喜欢的值:


    GsonBuilder().registerTypeAdapter(类型,MyCustomJsonDeserializer())

    如果使用非空默认值“”创建表,它无论如何都不可为空