gpt4 book ai didi

types - 奇怪的平等编译错误 : (No method 'equals(Any?): Boolean' available)

转载 作者:行者123 更新时间:2023-12-02 13:37:32 30 4
gpt4 key购买 nike

下面的代码

fun main(args: Array<String>) {
val a = listOf('A', Pair('X', 'Y'))

println(a[0] == 'B')
}

抛出编译错误:

Error:(4, 17) Unresolved reference: ==
Error:(4, 17) No method 'equals(Any?): Boolean' available

如截图所示: screenshot

为什么会出现这些编译错误?

编辑 1:它似乎与 when 表达式无关。

编辑 2:Code snippet (Press the "run" button on the top right to compile)
我需要手动转换以避免编译错误。使用智能类型转换也不起作用。 (或 val a: List<Any> = listOf('A', Pair('X', 'Y')) 有效)

最佳答案

这是一个棘手的案例。

Char 之间的最大公分母和 Pair恰好是Serializable接口(interface),它没有定义 equals()方法。 listOf(...)默认类型定义为其元素的最大公分母。

将数组转换为 List 将允许使用 equals()Any 上实现的功能,因此让代码工作:

fun main(args: Array<String>) {
val a = listOf('A', Pair('X', 'Y')) as List<Any>

println(a[0] == 'B')
println(a[0] == Pair('X', 'Y'))

if (a[0] is Char) {
println(a[0] == 'A')
}

println((a[0] as Char) == 'A')
}

更优雅一点的是定义 Any具体输入:

val a = listOf<Any>('A', Pair('X', 'Y'))

关于types - 奇怪的平等编译错误 : (No method 'equals(Any?): Boolean' available),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53030524/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com