我们知道我们应该支持组合而不是继承,对吧?好吧,
sort()
模板方法的实现者决定不使用继承,而是将其实现sort()
为在运行时与 Comparable 组合的静态方法。
- 这如何更好?
- 情况如何更糟?
- 你会如何处理这个问题?
- Java 数组是否让这变得特别棘手?
我们知道我们应该支持组合而不是继承,对吧?好吧,
sort()
模板方法的实现者决定不使用继承,而是将其实现sort()
为在运行时与 Comparable 组合的静态方法。
关于将功能添加到类或关联的实用程序类,总是存在设计辩论。和你一样,我更喜欢前者,但有些人认为这会使一个班级“太大”。我会将 sort() 放在 Collection 中,而不是放在 Collections 中,但 Sun 另有决定。
此外,在某些方面,数组不被视为“真正的”类,因此可能存在实现问题。
添加了说明
您仍然需要 Collections(或 AbstractCollection)中的静态 sort() 实用程序方法,以便罐装实现和任何用户定义的实现可以轻松地自行排序。所以,MyGoofyCollection.sort()
可以只调用Collections.sort(this);
但是,我更喜欢使用的习惯用法是调用myCollection.sort()
,而不是当前的Collections.sort(myCollection)
.
请注意,这也允许特定实现提供他们自己的、优化的 sort() 实现。例如,如果我有一个 AlwaysSortedList,它的 sort() 实现是什么都不做。
然而,这都是相当无用的讨论,因为 Java 已经按照自己的方式实现了它,而且不太可能改变......也许在 Java 9 或 10 中?