Kotlin中如何优雅合并apply与let语句实现非空条件下的Builder操作
方案1:无需自定义扩展的极简写法
现有代码可以直接简化为更紧凑的写法,不需要额外定义工具函数,和原逻辑完全等价:
private fun buildIcon(color: Color? = null) = Icon.Builder() .apply { color?.let(::setColor) }
方案2:自定义applyIfNotNull通用扩展
如果需要多次使用这类非空才执行的链式逻辑,可以定义一个泛型扩展函数,完全匹配你想要的调用格式:
// 放在顶层工具类中全局复用即可 fun <T, V> T.applyIfNotNull(value: V?, block: T.(V) -> Unit): T { if (value != null) block(value) return this }
定义完成后即可直接使用目标写法:
private fun buildIcon(color: Color? = null) = Icon.Builder() .applyIfNotNull(color) { setColor(it) }
内容的提问来源于stack exchange,提问作者Marcel Iwanicki
相关产品推荐
相关产品推荐

