Kotlin函数具有未指定的返回类型

时间:2018-04-14 22:22:03

标签: kotlin

在Kotlin中,如何使用未指定的返回类型声明函数?例如,如果我有一个返回整数列表的函数,但在null输入的情况下,它应该只返回null而不是List。 如何声明一个可以返回MutableList或null?

的函数

2 个答案:

答案 0 :(得分:2)

您只需使用类型声明末尾的?将您的类型声明为可为空。

例如,此函数采用非空Boolean并返回MutableList Intnull

fun maybeGetList(input: Boolean): MutableList<Int>? =
    if (input) mutableListOf(1) else null

Kotlin对此问题有quite extensive documentation

答案 1 :(得分:1)

托德根据你的要求给出了一个很好的答案,但如果你使用的是Kotlin,那么学会正确使用它可能会更好。

应尽可能避免使用null,这就是为什么Kotlin甚至具有空安全类型,因此它会强制您重新考虑代码并尝试编写它而不会讨厌?,只需看看在那个标志上,就好像它问你是否真的想要这样做。

现在,在你的情况下,你甚至有两个很好的选择来避免null和写更多惯用的Kotlin:

  1. 返回空列表:

    fun getList(condition: Boolean): List<Int> 
        = if(condition) listOf(1,2,3) else emptyList()
    
    fun getMutableList(condition: Boolean): MutableList<Int>
        = if(condition) mutableListOf(1,2,3) else mutableListOf()
    
  2. 使用Java中的Optional

    fun getOptionalList(condition: Boolean): Optional<List<Int>>
            = if (condition) Optional.of(listOf(1, 2, 3)) else Optional.empty()
    
  3. 您可能认为这样做会增加复杂性,但恰恰相反,使用null会增加更多复杂性,因为当您返回它时,您必须在调用此方法的每个位置处理null,你封装危险状态而不是传播它的方式。