Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组的sort()实现为静态并在运行时用comparable组合有哪些缺点?_Java_Design Patterns - Fatal编程技术网

Java 将数组的sort()实现为静态并在运行时用comparable组合有哪些缺点?

Java 将数组的sort()实现为静态并在运行时用comparable组合有哪些缺点?,java,design-patterns,Java,Design Patterns,我们知道我们应该支持组合而不是继承,对吗?那么,这个 sort()模板方法决定不使用继承,而是将sort()实现为静态 方法,该方法在运行时由可比较的 这怎么会更好 怎么会更糟 你将如何处理这个问题 Java数组是否使这一点变得特别棘手 关于向类或相关实用程序类添加功能,在设计上总是存在争议。和你一样,我更喜欢前者,但有些人认为这会让一门课“太大”。我会将sort()放在集合中,而不是集合中,但Sun决定不这样做 此外,在某些方面,数组没有被视为“真实”类,因此可能存在实现问题 添加了澄清 您

我们知道我们应该支持组合而不是继承,对吗?那么,这个
sort()
模板方法决定不使用继承,而是将
sort()实现为静态
方法,该方法在运行时由可比较的

  • 这怎么会更好
  • 怎么会更糟
  • 你将如何处理这个问题
  • Java数组是否使这一点变得特别棘手

关于向类或相关实用程序类添加功能,在设计上总是存在争议。和你一样,我更喜欢前者,但有些人认为这会让一门课“太大”。我会将sort()放在集合中,而不是集合中,但Sun决定不这样做

此外,在某些方面,数组没有被视为“真实”类,因此可能存在实现问题

添加了澄清

您仍然希望在集合(或AbstractCollection)中使用静态sort()实用程序方法,以便封装的实现和任何用户定义的实现都可以轻松地进行排序。所以,
MyGoofyCollection.sort()
可以调用
Collections.sort(this)myCollection.sort()
,而不是当前的
Collections.sort(myCollection)

请注意,这还允许特定实现提供自己的、优化的sort()实现。例如,如果我有一个AlwaysSortedList,它的sort()实现就是什么都不做


然而,这些都是毫无意义的讨论,因为Java已经按照他们的方式实现了它,而且它不太可能改变。。。也许在Java 9或10中?

比什么更好,特别是?您将如何通过继承实现这一点?在我看来,问题可能是“为什么使用组合来实现sort()模板方法更好?”可能是我们可以将“Arrays”类抽象化,并将mergeSort()标记为抽象(在sort()模板方法中)。但是数组不能被实例化。对于记录,Java8中引入了
List.sort(Comparator)
。好!!我对Java8没有太多的了解(很明显),但是我们如何评论在这种情况下使用组合比使用继承更糟糕呢?