You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:37:20