Kotlin代码出现Kotlin.Unit输出的原因及修复方案
为什么Kotlin函数返回Kotlin.Unit而非预期计算结果?
问题原因
在Kotlin中,如果函数没有显式声明返回类型且未通过return返回值,函数默认返回Unit类型——这是Kotlin用来表示“无返回值”的特殊类型,等价于Java中的void。
看你的错误代码:
fun main(){ val cal = cals(15,3,"/") println(cal) } fun cals(num1:Int,num2:Int,operation:String){ when (operation) { "+" -> num1 + num2 "-" -> num1 - num2 "*" -> num1 * num2 "/" -> num1 / num2 else -> 0 } }
这个cals函数没有声明返回类型,内部的when表达式虽然执行了数值计算,但这些计算结果并没有被返回给调用方。函数默认返回Unit实例,所以你用val cal = cals(...)接收的其实是Unit,println(cal)自然会输出Kotlin.Unit。
修复方法
要让函数返回计算结果,需要做两个关键修改:
- 给函数显式声明返回类型(这里是
Int) - 通过
return返回when表达式的结果(Kotlin中when是表达式,本身可以作为返回值)
修复后的正确代码:
fun main(){ val cal = cals(15,3,"/") println(cal) // 输出预期结果5 } fun cals(num1:Int,num2:Int,operation:String):Int { return when (operation) { "+" -> num1 + num2 "-" -> num1 - num2 "*" -> num1 * num2 "/" -> num1 / num2 else -> 0 } }
另外,Kotlin支持单表达式函数的简化写法,你可以进一步省略return和大括号,让代码更简洁:
fun cals(num1:Int,num2:Int,operation:String):Int = when (operation) { "+" -> num1 + num2 "-" -> num1 - num2 "*" -> num1 * num2 "/" -> num1 / num2 else -> 0 }
内容的提问来源于stack exchange,提问作者raptured_kira
相关产品推荐
相关产品推荐

