在Kotlin中,如何使用未指定的返回类型声明函数?例如,如果我有一个返回整数列表的函数,但在null输入的情况下,它应该只返回 null 而不是List . 如何声明一个可以返回MutableList或null的函数?
null
您只需使用类型声明末尾的 ? 将类型声明为可为空即可 .
?
例如,此函数采用非null Boolean 并返回 MutableList 的 Int 或 null :
Boolean
MutableList
Int
fun maybeGetList(input: Boolean): MutableList<Int>? = if (input) mutableListOf(1) else null
Kotlin有关于此主题的quite extensive documentation .
托德根据你的要求给出了一个很好的答案,但如果你使用的是Kotlin,那么学会正确使用它可能会更好 .
尽可能避免使用 null ,这就是为什么Kotlin甚至具有空安全类型所以它迫使你重新考虑你的代码并试着写它而不讨厌 ? ,只要看看那个标志,它就像它要求你做的那样你真的想这样做 .
现在,在你的情况下,你甚至有两个很好的选择,以避免 null 和写更多惯用的Kotlin:
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()
Optional
fun getOptionalList(condition: Boolean): Optional<List<Int>> = if (condition) Optional.of(listOf(1, 2, 3)) else Optional.empty()
您可能认为这样做会增加复杂性,但恰恰相反,使用 null 会增加更多复杂性,因为当您返回它时,您必须在调用此方法的每个位置处理 null ,这样您就可以封装危险状态而不是传播它 .
2 回答
您只需使用类型声明末尾的
?
将类型声明为可为空即可 .例如,此函数采用非null
Boolean
并返回MutableList
的Int
或null
:Kotlin有关于此主题的quite extensive documentation .
托德根据你的要求给出了一个很好的答案,但如果你使用的是Kotlin,那么学会正确使用它可能会更好 .
尽可能避免使用
null
,这就是为什么Kotlin甚至具有空安全类型所以它迫使你重新考虑你的代码并试着写它而不讨厌?
,只要看看那个标志,它就像它要求你做的那样你真的想这样做 .现在,在你的情况下,你甚至有两个很好的选择,以避免
null
和写更多惯用的Kotlin:Optional
:您可能认为这样做会增加复杂性,但恰恰相反,使用
null
会增加更多复杂性,因为当您返回它时,您必须在调用此方法的每个位置处理null
,这样您就可以封装危险状态而不是传播它 .