下面的代码
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
为什么会出现这些编译错误?
编辑 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/