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
相关产品推荐
相关产品推荐

