未指定返回类型的Kotlin函数

未指定返回类型的Kotlin函数,kotlin,Kotlin,在Kotlin中,如何声明具有未指定返回类型的函数?例如,如果我有一个返回整数列表的函数,但如果输入为null,它应该只返回null,而不是列表。 如何声明一个可以返回可变列表或null的函数?您只需在类型声明末尾使用?将您的类型声明为null即可 例如,此函数采用非null的布尔值,并返回Int的MutableList或null: fun maybeGetList(input: Boolean): MutableList<Int>? = if (input) mutable

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

您只需在类型声明末尾使用
将您的类型声明为null即可

例如,此函数采用非null的
布尔值
,并返回
Int
MutableList
null

fun maybeGetList(input: Boolean): MutableList<Int>? =
    if (input) mutableListOf(1) else null
fun-maybeGetList(输入:布尔):可变列表=
if(输入)mutableListOf(1)else null

科特林在这个问题上有自己的见解。

托德根据你的要求给出了一个很好的答案,但如果你正在使用科特林,那么最好学会正确使用它

应该尽可能避免使用
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()
    

  • 您可能认为这样做会增加复杂性,但恰恰相反,使用
    null
    会增加更多的复杂性,因为当您返回它时,您必须在调用此方法的每个地方处理
    null
    ,这样您就封装了危险状态,而不是传播它

    请记住,应该避免使用
    null
    ,尤其是在这种情况下,您可以只返回空列表。回答得好!
    fun getOptionalList(condition: Boolean): Optional<List<Int>>
            = if (condition) Optional.of(listOf(1, 2, 3)) else Optional.empty()