代码之家  ›  专栏  ›  技术社区  ›  Jim

我可以将when与check for null更改为其他方法吗?

  •  1
  • Jim  · 技术社区  · 5 年前

    在Kotlin,有没有一种更“Kotlin”的方式来完成以下工作?

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

    null 具有 when 在Kotlin中可以写得不同

    1 回复  |  直到 5 年前
        1
  •  7
  •   Pawel    5 年前

    您可以使用作用域函数来减少“冗余”代码:

    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()
    }
    
        2
  •  2
  •   Diego Marin Santos    5 年前

    我不确定这是否是一个更科特林的方式,但你也可以做以下

    fun parse(inputSample: Sample): List<String> = 
          inputSample.foo?.let { parse(it) } ?: inputSample.bar?.let {parse(it) } ?: emptyList()