【问题标题】:What is the condition that an equality operator (==) cause a compile error in Kotlin?Kotlin 中相等运算符 (==) 导致编译错误的条件是什么?
【发布时间】:2020-02-14 16:56:49
【问题描述】:

等式运算符 (==) 在 Kotlin 中导致编译错误的条件是什么?

当然,比较相同的类型是可以的。

fun compare1(x: Int) = x == 1

比较不同的类型会导致错误:

fun compare2(x: String) = x == 1

运算符 '==' 不能应用于 'String' 和 'Int'

但与泛型类型相比是可以的,尽管 T 可能是字符串:

fun <T> compare3(x: T) = x == 1

【问题讨论】:

  • 编译器无法告诉你这是否会失败,如果 T 可以是任何东西,它应该怎么能。但这当然会引发运行时错误。
  • @phaen 如果equals 可以抛出异常,这是一个糟糕的实现:)
  • @AlexeyRomanov 我没有说明其他任何内容,只是说编译器无法意识到这一点(正如您所说的,这只是 TA 的错误实现),因此您在编译时不会出错。
  • 你说它会引发运行时错误,但它不会。它只会返回 false。

标签: kotlin


【解决方案1】:

== 不能应用于不兼容的类型,即一个对象不能同时具有两种类型。请注意,即使它实际上会返回 true,这也适用:

class X(val n: Int) {
    override fun equals(other: Any?) = x is Int
}

public fun main(){
    println(X(0) == 0) // Operator '==' cannot be applied to 'X' and 'Int'
}

假设equals“不应该”为不兼容的类型返回true

所以在compare3 中重要的不是T 可能是String,而是它可能是Int,所以比较有时是有意义的。

【讨论】:

    猜你喜欢
    • 2017-04-08
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多