Kotlin新手求助:如何仅当参数非空时为Builder设置值
Kotlin中如何在Builder链式调用中仅非空时设置参数
嘿,作为Kotlin初学者碰到这个问题太正常啦!你说的let()函数确实是解决这类非空判断场景的好工具,我给你两种清晰的写法,你可以根据习惯选:
写法一:链式调用中用apply+let(推荐,保持链式风格)
这种写法能完美融入原来的Builder链式调用,代码看起来很连贯:
private fun myFunc(var1: Type1 , var2: Type2?) { val request = class1.newBuilder() .setType1(var1) // 这里用apply拿到Builder上下文,再对var2做非空判断 .apply { var2?.let { nonNullVar2 -> setType2(nonNullVar2) } } .build() clientClass.send(request) }
简单解释下:
var2?.let { ... }:?.是Kotlin的安全调用操作符,只有当var2不为null时才会执行后面的let代码块;let里的it(我这里改成了nonNullVar2让代码更易读)就是自动转成非空类型的var2,绝对不会触发空指针。apply函数的作用是让我们在当前Builder对象的上下文里执行代码,执行完后还是返回Builder本身,所以不影响后续的.build()链式调用。
写法二:拆分Builder创建步骤(更直观,适合新手理解)
如果你觉得链式里嵌套有点绕,也可以把Builder的创建和参数设置拆开来写,逻辑一目了然:
private fun myFunc(var1: Type1 , var2: Type2?) { // 先创建Builder并设置必传的var1 val builder = class1.newBuilder().setType1(var1) // 仅当var2非空时,才调用setType2 var2?.let { builder.setType2(it) } // 最后构建请求并发送 val request = builder.build() clientClass.send(request) }
两种写法都能解决你的问题,核心都是利用?.安全调用+let的组合,确保只有非空值才会触发setType2的调用,从根源避免空指针异常~
内容的提问来源于stack exchange,提问作者ever alian
相关产品推荐
相关产品推荐

