Kotlin接口委托实现出现异常结果,求技术排查提示
问题排查思路
1. 先修复语法错误
你的main函数定义存在语法问题,括号位置错误,正确写法如下:
fun main() { val shark = Shark(carnivorous) println("---------------------------"); println("Shark color: ${shark.color}"); println("Shark swim: ${shark.swim()}"); }
这个错误会导致代码无法正常编译,是需要优先解决的基础问题。
2. 解决Shark swim: kotlin.Unit的输出异常
出现kotlin.Unit是因为swim()是无返回值函数(Kotlin中无返回值函数默认返回Unit类型),而你把shark.swim()的调用放在了字符串模板里,外层println会把函数的返回值Unit也打印出来。同时swim()内部已经执行了println("swim quickly"),所以才会出现先打印swim quickly,再打印Shark swim: kotlin.Unit的情况。
有两种解决方式:
- 方式一:拆分调用逻辑,不要将无返回值函数嵌入字符串模板
println("Shark swim:") shark.swim() - 方式二:修改
swim()函数让它返回字符串,而非直接打印
此时调用override fun swim(): String { return "swim quickly" }println("Shark swim: ${shark.swim()}"),会输出Shark swim: swim quickly,符合预期。
3. 接口委托逻辑验证(可选)
你的IFeeding接口委托逻辑是正常的,如果需要验证,可以在main函数中添加shark.eat()调用,会输出Meat!,证明委托功能正常。
内容的提问来源于stack exchange,提问作者Carlos Ortega
相关产品推荐
相关产品推荐

