这是我的功能:
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/