Nae*_*mul 5 types equality kotlin
下面的代码
fun main(args: Array<String>) {
val a = listOf('A', Pair('X', 'Y'))
println(a[0] == 'B')
}
Run Code Online (Sandbox Code Playgroud)
抛出编译错误:
Error:(4, 17) Unresolved reference: ==
Error:(4, 17) No method 'equals(Any?): Boolean' available
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些编译错误?
编辑1:它似乎与when 表达式无关。
编辑2:代码片段(按右上角的“运行”按钮进行编译)
我需要手动转换以避免编译错误。使用智能转换也不起作用。(或val a: List<Any> = listOf('A', Pair('X', 'Y'))作品)
这是一个棘手的案例。
Char和之间的最大共同点Pair恰好是Serializable接口,它不定义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')
}
Run Code Online (Sandbox Code Playgroud)
更优雅的方法是Any专门定义类型:
val a = listOf<Any>('A', Pair('X', 'Y'))