3

在 Kotlin 中是否有更“Kotlin”的方式来执行以下操作?

fun parse(inputSample: Sample): List<String> = 
   when {
     inputSample.foo != null -> parse(inputSample.foo)
     inputSample.bar != null -> parse(inputSample.bar)
     else -> emptyList()
  }

我怀疑在 Kotlin 中检查nullwithwhen可以用不同的方式编写

4

2 回答 2

7

您可以使用范围功能来减少“冗余”代码:

fun parse(inputSample: Sample): List<String> = inputSample.run {
    when {
        foo != null -> parse(foo)
        bar != null -> parse(bar)
        else -> emptyList()
    }
}

或与 elvis 运算符结合使用(请注意,这是假设foo并且bar属于同一类型):

fun parse(inputSample : Sample) : List<String> = inputSample.run {
    (foo ?: bar)?.let { parse(it) } ?: emptyList()
}
于 2019-10-10T23:09:34.533 回答
2

我不确定这是否是更 Kotlin 的方式,但您也可以执行以下操作

fun parse(inputSample: Sample): List<String> = 
      inputSample.foo?.let { parse(it) } ?: inputSample.bar?.let {parse(it) } ?: emptyList()
于 2019-10-10T22:36:33.357 回答