为什么不是Kotlin Collections中的isEmpty属性?
我开始学习Kotlin,只注意到Collections.isEmpty
是一个函数,而不是一个属性。 但是, Collections.size
是一个属性而不是函数。
在大多数(所有?)集合中,我期望这两者在语义上是相关的,而isEmpty
的实现可以简单地为size === 0
。
那么…为什么不是一个属性? 这只是一个设计错误?
在决定java.util.Collection
哪些方法是kotlin.collections.Collection
的属性时, kotlin.collections.Collection
考虑以下因素:
- 根据Kotlin编码约定 ,
size
和isEmpty
都可以被认定为属性,但是size
是固有的,isEmpty
只是size
属性的派生。 - 当实现一个集合时,可以用一个var属性来覆盖val的
size
(可能是一个私有的setter),但isEmpty
几乎不需要。 - 将方法作为一个属性公开需要在派生类中生成额外的方法,更好地保持它们的数量尽可能小。
在java中你有list.isEmpty()
方法列表 list.isEmpty()
() 。 在list.isNotEmpty
中有一个list.isNotEmpty
属性会混淆人。
恕我直言,为什么Kotlin- isNotEmpty
选择使isNotEmpty
一个方法,而不是一个属性是java的一致性。