为什么 'operator' 关键字在 Kotlin 中的 hasNext()、next() 和 iterator() 上是可选的?



我正在构建自己的集合,当我实现Iterable时,我意识到我忘记将operator关键字放在我的集合中的iterator()方法上,也忘记将hasNext()next()两个方法放在我的Iterator中。无论是否使用operator关键字,代码仍然可以正常工作。现在,我理解为什么这些方法是操作符方法。我只是想知道为什么他们选择让它成为一个操作符方法,然后不强迫用户在它旁边使用operator关键字。

当您重写函数或属性时,它会隐式地继承父类型的关键字,除非您使用与之相矛盾的关键字。例外是override,它必须始终显式地使用。

根据Tenfour04的回答和我自己的发现,我意识到我没有被迫使用operator关键字的原因是因为我继承了Kotlin的IterableIterator。这些接口已经包含了iterator()hasNext()next()方法,并在它们旁边加上了关键字operator。正如Kotlin文档所述:

当重写操作符重载时,可以省略operator

并且,这些方法要求您使用operator关键字的原因是因为您没有被强制从IterableIterator继承。在Kotlin中,欢迎您创建自己的自定义CustomIterableCustomIterator,如果您想使用foreach循环,则将被迫在方法旁边使用operator关键字。但是,不继承Iterable意味着您将无法使用Kotlin的任何有用的收集操作方法,如.forEach { … },.map { … },.filter { … }等。

最新更新