为了简单起见,我将坚持在代码中使用抽象。我在写一个函数,它取一个可空的颜色来设置它,只有当它不为空时。我使用的是Builder,代码看起来像这样:
private fun buildIcon(color: Color? = null) =
Icon.Builder()
.apply{ color?.let { this.setColor(color) } }
它可以工作,但是看起来有点丑,我如何把它做成一个语句,比如applyIfNotNull(color) {this。setcolor (It)},但也许更简单,我只想把这些语句合并成一个。我试着这样做,就像在如何实现Kotlin的应用程序?但我不能让它工作。
你可以这样实现你的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) }
你可以在这里验证。