kotlin - 为什么 Kotlin 不能覆盖 List<*> 运算符方法?

标签 kotlin

这是我的功能:

operator  infix fun  List<Teacher>.get(int: Int): Teacher {
    var t = Teacher()
    t.name = "asd"
    return t ;
}

和我的用法:
b[0].teachers[1].name

提示:b 是具有 List 属性的对象

和错误 Empty list doesn't contain element at index 1.
为什么这个覆盖运算符功能不起作用?

最佳答案

在 Kotlin 中,您不能使用扩展来隐藏成员函数。一个 成员(member)总是赢在通话分辨率中。因此,您基本上不能调用具有与成员函数相同的签名的扩展,该扩展存在于为表达式声明或推断的类型中。

class C {
    fun foo() { println("member") }
}

fun C.foo() { println("extension") }

C().foo() // prints "member"

在您的情况下,成员函数是 abstract operator fun get(index: Int): E 定义于 kotlin.collections.List .

请参阅语言引用:Extensions are resolved statically

关于kotlin - 为什么 Kotlin 不能覆盖 List<*> 运算符方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327135/

相关文章:

java - 如何将 Java 类转换为 Kotlin 数据类

kotlin - 如何在运行时使ktor重新加载JS更改

Android RecyclerView 滑动删除图标仅绘制在第一个元素上

android - Kotlin SAM 转换不适用于具有两个参数的函数

java - 自动记录在 catch block 中,仅当注释异常变量时,对于 Java 或 Kotlin

android - 人们安装我的应用程序时,他们会得到两个应用程序

java - 返回按钮会导致意外行为

java - 如何在 Kotlin 中检查数组类型(不是泛型类型)

android - 如何检查数据是否插入到房间数据库中

inheritance - Kotlin 中的 var 可以用带有继承类的 val 覆盖吗?