仅在不为null的情况下将参数传递给函数

时间:2019-08-02 11:37:24

标签: kotlin default-parameters

我需要将可为空的参数传递给仅接受非可为空的对象,但已定义默认值的函数。

当前我正在使用let:

fun myFun(a:String = "qqq"): Whatever {...}

val myString:String? = getNullableString()

val myFunResult = myString.?let{myFun(it)}?:myFun()

这很冗长,当有多个可选参数时,这是不可能的。 我需要类似的东西

val myFunResult = myFun(myString?:default)

是否有一种实用的方法?

3 个答案:

答案 0 :(得分:1)

您可以允许将可为空的值作为参数传递到函数中,将命名默认值更改为null并在函数体内设置实际默认值:

fun myFun(a: String? = null) {
    val a = a ?: DEFAULT_VALUE
    // rest of the function
}

val myFunResult = myFun(myString)

答案 1 :(得分:1)

如果您不想在函数之外重复默认值(我不会),则必须进行某种条件检查。就个人而言,我发现let表达式在扫描代码时很难阅读,并且可能仅与if一起使用。请记住,在Kotlin中,if是一个表达式:

if(myString == null) myFun() else myFun(myString)

答案 2 :(得分:0)

由于您提到了您不能更改正在调用的初始函数。编写一个新函数来调用初始函数可能是一种更具可读性的方法。

fun myFun(a:String = "qqq"): Whatever {...}
fun myNewFun(a:String? = null): Whatever = if(a == null) myFun() else myFun(a)