【问题标题】:why does == creates compilation error on different types in Kotlin为什么 == 在 Kotlin 中的不同类型上创建编译错误
【发布时间】:2017-07-10 21:33:59
【问题描述】:

以下代码无法编译:

if ("2" == 3) {
  //do something
}

Error: Kotlin: Operator '==' cannot be applied to 'String' and 'Int'

然而,Kotlin 文档说这是结构上的平等,并被翻译为 a?.equals(b) ?: (b === null): https://kotlinlang.org/docs/reference/equality.html

那么这里到底发生了什么?它是如何工作的?

【问题讨论】:

    标签: compiler-errors kotlin


    【解决方案1】:

    这是一个 Kotlin 的 bug,在 youtrack 中报告为KT-4071,优先级为Major,所以我认为它会很快修复。例如:

    val ok = "2".equals(3) // works fine
    val error = "2" == 3 // compilation error
    

    【讨论】:

    • 我认为这个错误是在谈论一个相关的警告,而不是看起来是故意的错误本身。
    • @oshai 没有。记者描述的正是编译错误报告为:“EQUALITY_NOT_APPLICABLE”。而记者希望这样的错误变成警告。
    • 可能你是对的。但是,该错误是在 2013 年 10 月 12 日创建的,所以我怀疑 JB 不打算改变它的行为方式。
    • 我认为这是有意的。它们的类型不同,并且您知道它们在编译时一定不相等(两者都已经不为空)。如果你在跑之前就知道它们是不同的,你为什么还要比较它们呢?它总是错误的。它只会增加错过附加方法(如.toString())的机会。
    • 目前我们没有计划改变 == 在类型方面的行为。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多