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

Kotlin使用自定义TokenCommandResult密封类报错且跳转实现异常如何修复

问题原因
  • 你定义的TokenCommandResult内部的Success、Error、Fault都是带构造参数的普通嵌套类,不是单例object,无法直接作为常量在模式匹配分支中直接引用类名匹配,所以编译器抛出「不是一个值」的错误
  • 匹配语法不符合规则:如果是Kotlin环境应使用when表达式做分支判断,匹配类型需要使用is关键字;如果是Scala互调用match,也需要匹配类类型而非直接引用类名
  • 跳转不到自定义源码是因为编译期语法校验不通过,IDE无法关联源文件索引,只能定位到编译后的字节码文件
修复方案

场景1:Kotlin环境下的代码修复

将匹配逻辑替换为正确的when表达式写法,通过is匹配子类类型,Kotlin会自动做智能转换,可直接读取子类的属性:

when (result) {
    is TokenCommandResult.Success -> printError("w", result.response.toString())
    is TokenCommandResult.Error -> printError(format, result.error.errorObject.description)
    is TokenCommandResult.Fault -> printError(format, result.exception.message.orEmpty())
}

场景2:Scala调用Kotlin代码的修复

调整match的分支写法,匹配类类型并绑定变量后读取属性:

result match {
    case success: TokenCommandResult.Success => printError("w", success.response.toString)
    case error: TokenCommandResult.Error => printError(format, error.error.errorObject.description)
    case fault: TokenCommandResult.Fault => printError(format, fault.exception.getMessage)
}

修复后重新构建项目即可解决编译报错,IDE也能正常跳转到你自定义的密封类源码。

内容的提问来源于stack exchange,提问作者user15826601

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:06:03