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

Kotlin布尔类型扩展函数返回结果不符预期,求解析

Kotlin Boolean扩展函数不生效的原因解析

你遇到的问题核心是Kotlin中成员函数的调用优先级高于扩展函数。

你的代码里定义了Boolean的扩展函数and,但标准库的Boolean类本身已经存在一个签名完全一致的成员函数:infix fun and(other: Boolean): Boolean,它的逻辑是返回两个布尔值的逻辑与(只有当两个参数都为true时返回true,否则返回false)。当你调用true.and(false)时,Kotlin会优先选择标准库的成员函数执行,所以输出了false,而非你自定义扩展函数的true。

Boolean类型扩展函数的核心逻辑

  • 扩展函数是给现有类添加新功能的语法糖,不会修改原类的内部实现。
  • 若扩展函数与原类的成员函数签名(函数名、参数类型/数量)完全一致,调用时会优先使用成员函数。
  • 要让自定义扩展函数生效,需修改签名避免冲突:
    • 更改函数名,比如改成myAnd:
      fun Boolean.myAnd(it: Boolean): Boolean = true
      
      fun main() {
          val b = true.myAnd(false)
          println(b) // 输出true
      }
      
    • 或添加额外参数、修改参数类型等。
  • 额外补充:Kotlin里&&操作符和and函数的区别是,&&会短路求值(第一个参数为false时,第二个参数不会执行),而and作为普通函数会执行所有参数表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:45:55