Uri*_*Uri 18 java api collections
我正在尝试理解Java标准集合库中的API不一致性.
List或AbstractList中没有方法可以获取最后一项,尽管可以使用size和getIndex()来模拟它.
但是,LinkedList支持该功能.
知道为什么决定不在界面中支持这种方法吗?
Mat*_*och 19
该java.util.List接口不支持getLast(),因为设计师去了一个"最低限度接口".通过定义最少数量的方法,它使得它更容易理解和更快学习.
这与"人性化接口"(例如在Ruby数组类中使用)相反,后者试图提供进行常见操作的方法(例如getLast()).由于有许多用途可以将这样的基本概念作为列表放入其中,这往往会导致更大的接口.
有关详细信息,请参阅Martin Fowler的Minimal Interface和Humane Interface说明.
至于为什么LinkedList支持getLast()等,引用javadoc:
... LinkedList类提供统一命名的方法来获取,删除和插入列表开头和结尾的元素.这些操作允许链表用作堆栈,队列或双端队列(双端队列).
据推测,有人认为一般列表不适合这些特定用例.
作为对Java Collections API(Joshua Bloch)的主要设计者的思想的洞察,他提供了他工作的API设计格言列表.其中,与此问题最相关的是:
早期的API草稿应该简短,通常是一个页面,包含类和方法签名以及单行描述.这样,当您第一次没有正确使用时,可以轻松地重新构建API.
如有疑问,请将其删除.如果有一个API设计的基本定理,就是这样.它同样适用于功能,类,方法和参数.API的每个方面都应尽可能小,但不能小一些.您可以随时添加内容,但不能将其删除.最小化概念权重比类或方法计数更重要.
保持API不受实现细节的影响.它们会混淆用户并抑制进化的灵活性.并不总是很明显什么是实施细节:警惕过度指定.
尽量减少可访问性; 如有疑问,请将其设为私有.这简化了API并减少了耦合.
考虑API设计决策的性能影响,但不要扭曲API以实现性能提升.幸运的是,良好的API通常适合快速实现.
但他也说:
不要让客户做任何图书馆可以做的事情.违反此规则会导致客户端出现样板代码,这很烦人且容易出错.
这只是表明设计指南经常发生冲突,而API设计师工作中最难的部分就是平衡这些冲突.
通常原因是他们想要指定具有Big-O要求的每个函数,并认为无法在所有列表上有效地实现getLast().因此,他们以Big-O承诺在每个级别引入它.
或者它可能只是一个疏忽,或者他们认为它不常见,如果你需要它,你可以得到它与size/getIndex.
| 归档时间: |
|
| 查看次数: |
6700 次 |
| 最近记录: |