You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:44:07