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。
为简单起见,我将坚持在代码中进行抽象。 所以我正在编写一个函数,它只在它不为空时才使用一些可为空的颜色来设置它。我正在使用 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。