我需要将可为空的参数传递给仅接受非可为空的对象,但已定义默认值的函数。
当前我正在使用let:
fun myFun(a:String = "qqq"): Whatever {...}
val myString:String? = getNullableString()
val myFunResult = myString.?let{myFun(it)}?:myFun()
这很冗长,当有多个可选参数时,这是不可能的。 我需要类似的东西
val myFunResult = myFun(myString?:default)
是否有一种实用的方法?
答案 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)