我写运算符
private fun method() {
operator fun Float.rangeTo(other: Int) {
(this.toInt()..other).forEach { print(it) }
}
0f..4
}
这很好用,即打印01234
但是当我将float
替换为Int
时,它不再起作用,即不打印01234
private fun method() {
operator fun Int.rangeTo(other: Int) {
(this..other).forEach { print(it) }
}
0..4
}
我想念什么?我该如何运作?
答案 0 :(得分:5)
如果您在IntelliJ中查看此代码,则会在rangeTo
函数上以警告的形式得到答案:
扩展被成员遮盖:public final运算符fun rangeTo(other:Int):IntRange
扩展不能覆盖类型已经具有的方法,并且由于Int
具有非扩展rangeTo(Int)
方法,因此0..4
语法将始终调用该方法。如果您考虑一下,实际上在记下this..other
时就利用了这一事实,因为这是对内置rangeTo
的调用,而不是对您自己的扩展的递归调用功能。
它与Float
一起工作的原因是它没有自己的成员rangeTo(Int)
方法。
答案 1 :(得分:1)
rangeTo
已经是Int
的成员,并且正如您在Intellij IDEA中看到的那样,该阴影已隐藏。这是设计使然。