Kotlin:如何以一种很好的方式将两个语句 "apply" 和 "let" 放在一起?

Kotlin: how to put two statements "apply" and "let" together in a nice way?

为简单起见,我将坚持在代码中进行抽象。 所以我正在编写一个函数,它只在它不为空时才使用一些可为空的颜色来设置它。我正在使用 Builder,代码如下所示:

private fun buildIcon(color: Color? = null) =
    Icon.Builder()
        .apply{ color?.let { this.setColor(color) } }

它有效,但它看起来有点丑陋,我如何将它变成一个语句,所以像 applyIfNotNull(color) { this.setColor(it) } 这样的东西,但也许更简单,我只想合并这些陈述合二为一。我尝试像 中那样做,但无法正常工作。

您可以像这样实现 applyIfNotNull 函数:

inline fun <T, U> T.applyIfNotNull(value: U?, block: T.(U) -> Unit): T {
    if(value != null)
        this.block(value)
    return this
}

用法:

private fun buildIcon(color: Color? = null) =
    Icon.Builder().applyIfNotNull(color) { this.setColor(it) }

你可以验证一下here