我正在构建自己的集合,当我实现Iterable
时,我意识到我忘记将operator
关键字放在我的集合中的iterator()
方法上,也忘记将hasNext()
和next()
两个方法放在我的Iterator
中。无论是否使用operator
关键字,代码仍然可以正常工作。现在,我做理解为什么这些方法是操作符方法。我只是想知道为什么他们选择让它成为一个操作符方法,然后不强迫用户在它旁边使用operator
关键字。
当您重写函数或属性时,它会隐式地继承父类型的关键字,除非您使用与之相矛盾的关键字。例外是override
,它必须始终显式地使用。
根据Tenfour04的回答和我自己的发现,我意识到我没有被迫使用operator
关键字的原因是因为我继承了Kotlin的Iterable
和Iterator
。这些接口已经包含了iterator()
、hasNext()
和next()
方法,并在它们旁边加上了关键字operator
。正如Kotlin文档所述:
当重写操作符重载时,可以省略
operator
。
并且,这些方法要求您使用operator
关键字的原因是因为您没有被强制从Iterable
和Iterator
继承。在Kotlin中,欢迎您创建自己的自定义CustomIterable
和CustomIterator
,如果您想使用foreach循环,则将被迫在方法旁边使用operator
关键字。但是,不继承Iterable
意味着您将无法使用Kotlin的任何有用的收集操作方法,如.forEach { … }
,.map { … }
,.filter { … }
等。