重写运算符Int RangeTo不起作用



我编写操作符

private fun method() {
operator fun Float.rangeTo(other: Int) {
(this.toInt()..other).forEach { print(it) }
}
0f..4
}

此操作效果良好,即打印01234

但当我用Int替换float时,它不再工作,即不打印01234

private fun method() {
operator fun Int.rangeTo(other: Int) {
(this..other).forEach { print(it) }
}
0..4
}

我错过了什么?我该怎么做?

如果您在IntelliJ中查看此代码,您将在rangeTo函数上得到警告形式的答案:

扩展被一个成员遮蔽:public最终运算符fun rangeTo(other:Int(:IntRange

扩展不能覆盖类型已经具有的方法,并且由于Int具有非扩展rangeTo(Int)方法,0..4语法将始终调用该方法。如果你仔细想想,当你写下this..other时,你实际上是在利用这个事实,因为这是对内置rangeTo运算符的调用,而不是对你自己的扩展函数的递归调用。

它使用Float的原因是它没有自己的成员rangeTo(Int)方法。

rangeTo已经是Int的一个成员,正如您在Intellij IDEA中看到的那样,它隐藏了您创建的运算符。这是经过设计的。

最新更新