让f()
返回一个可为空的值。
我想做的是,
如果f()
为空,则获取一个空列表,
否则如果f()
不为空,则获取单个项目的列表value
。
在 Scala 中,我们可以这样做:
Option(f()).toList
或更详细地说
Option(f()).map(v => List(v)).getOrElse(List.empty)
在 Kotlin 中,没有(假设没有 Funktionale 库),并且 null在 ScalaOption
中没有toList()
不同的 ( )。None: Option
我们有 Elvis 运算符,但 null 将在listOf()
函数内部,所以它将是
listOf(f() ?: /* What can I do here? */)
我们想要的 null 是listOf(/*no argument */)
,但 Elvis 运算符需要一个参数,因此listOf(f() ?: )
会导致编译错误。
至少我们可以做到
val v = f()
if (v == null) listOf() else listOf(v)
但它是一个两班轮。
有什么表达吗?
我将在类的主要构造函数默认参数中使用这个表达式,所以如果它不是一个单行,它将被括在括号中,所以像这样:
class A(
val p1: List<V> = run {
val v = f()
if (v == null) listOf() else listOf(v)
},
val p2: ... = ...,
...)
这看起来很丑,不是吗?