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

为什么在Kotlin中使用is运算符会出现「类型不兼容」错误

两种写法的差异与报错原因

这是Kotlin静态类型检查机制的正常表现,核心差异是两种场景下变量的编译期确定类型不同:

  • 当你把各类数值存入List<Any>时,所有元素都会在编译期向上转型为Any类型,遍历得到的每个元素编译期类型都为Any。Any是Kotlin所有类型的根父类,和Int、Long等类型不存在类型互斥关系,因此编译期不会拦截is运算符判断,实际类型校验会推迟到运行时执行。
  • 当你直接对推断为Int类型的num2做is Long判断时,编译期已经明确知道num2的固定类型为Int,而Kotlin类型系统中Int和Long是平级的、完全互不兼容的独立类型(二者都继承自Number但无父子继承关系),编译器可以100%确定该判断永远为false,属于无意义的无效代码,因此直接抛出编译错误。

补充:如果确实需要对固定编译类型的变量做跨类型校验,可以先手动将变量向上转型为Any再判断,例如(num2 as Any) is Long,该写法可正常通过编译,运行时返回结果为false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:57:04