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



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

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 或几乎任何其他状态代码,我将没有数据来填充"a"到"f",因此我选择了上述解决方案,我只强制我将始终返回的状态代码不为空,然后默认每个其他值为空。

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

真的我想传达信息不存在,似乎这可以做到这一点,但我想知道是否有更好的方法。

您可以考虑为此使用密封类:

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()

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

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

以下是如何处理这些结果:

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 */ }
}
}

相关内容

  • 没有找到相关文章

最新更新