如果可能无法设置数据,除了将 data class 构造函数值设置为 null 之外,还有更好的方法吗

Is there a better way other than setting data class constructor values to null if its possible the data cannot be set

我有一种情况,我在 kotlin 中创建一个休息客户端作为实际学习练习,最近遇到了这个问题:

             data class ai constructor(val statusCode: Int,
                                       val a: Long? = null,
                                       val b: Long? = null,
                                       val c: Date? = null,
                                       val d: Long? = null,
                                       val e: String? = null,
                                       val f: String? = null)

问题是这样的,如果我得到 200 返回,我将有数据填充 'a' 到 'f',但如果我得到 401 或几乎任何其他状态代码,我会没有通过 'f' 填充 'a' 的数据,因此我选择了上述解决方案,我只强制我将始终返回的状态代码不为空,然后将所有其他值默认为空。

我不想将默认值设置为 "" 或 -1 之类的东西,因为如果用户不检查状态代码,那么这些数据总是有可能以某种方式通过。

我真的想传达信息不存在,看起来这样就可以了,但我想知道是否有更好的方法。

您可以考虑为此使用 sealed class

sealed class Result

data class Success constructor(val statusCode: Int = 200,
                               val a: Long,
                               val b: Long,
                               val c: Date,
                               val d: Long,
                               val e: String,
                               val f: String): Result()

data class Failure(val statusCode: Int): Result()

(我不知道你的 class 的显式构造函数是否是故意的,是否有注释等等)

这样,如果您调用成功,您将创建一个 Success 实例,如果调用失败,您可以创建一个 Failure 实例,它甚至不包含表示接收到的数据的属性(想一想,您可以将 statusCode 移动到 Result class,这是另一种选择)。

下面是处理这些结果的方法:

fun processResult(result: Result) {
    when (result) {
        is Success -> { /* Use result, which is smart cast to a Success now */ }
        is Failure -> { /* Use result, which is smart cast to a Failure now */ }
    }
}