0

我在 lambda 函数中有一些代码,如下所示:

{ y, m, d ->
    // update time, but only if it has already been set
    val oldTime = model.time
    if (oldTime != null) {
        model.time = Calendar.getInstance().apply {
        time = oldTime
        set(Calendar.YEAR, y)
        set(Calendar.MONTH, m)
        set(Calendar.DAY_OF_MONTH, d)
        }.time
    }
}

有没有办法使用 let/with/apply/run 函数和 null 安全运算符来缩短此代码(减少引用字段的次数model.time,并在可能的情况下删除临时变量)?oldTime

不幸的是,放在model.time ?: return开头不起作用,因为它在 lambda 函数中。

4

1 回答 1

3

这应该会稍微缩短您的代码:

model.time?.let {
    model.time = Calendar.getInstance().apply {
        time = it
        set(Calendar.YEAR, y)
        set(Calendar.MONTH, m)
        set(Calendar.DAY_OF_MONTH, d)
    }.time
}
于 2020-06-28T07:46:34.920 回答