在Kotlin中,如何使用未指定的返回类型声明函数?例如,如果我有一个返回整数列表的函数,但在null输入的情况下,它应该只返回null
而不是List。
如何声明一个可以返回MutableList或null?
答案 0 :(得分:2)
您只需使用类型声明末尾的?
将您的类型声明为可为空。
例如,此函数采用非空Boolean
并返回MutableList
Int
或null
:
fun maybeGetList(input: Boolean): MutableList<Int>? =
if (input) mutableListOf(1) else null
Kotlin对此问题有quite extensive documentation。
答案 1 :(得分:1)
托德根据你的要求给出了一个很好的答案,但如果你使用的是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()
使用Java中的Optional
:
fun getOptionalList(condition: Boolean): Optional<List<Int>>
= if (condition) Optional.of(listOf(1, 2, 3)) else Optional.empty()
您可能认为这样做会增加复杂性,但恰恰相反,使用null
会增加更多复杂性,因为当您返回它时,您必须在调用此方法的每个位置处理null
,你封装危险状态而不是传播它的方式。