Aad*_* RF 34 java arrays static
我正在阅读Java文档,并且我了解到Arrays
Java 中的类中的方法都是静态的.我真的不明白为什么他们把它变成静态的原因.
例如,以下代码违反了OO方法,因为如果我有一个类型'X',那么作用于它的所有方法都应该在其中:
int[] a = {34, 23, 12};
Arrays.sort(a);
Run Code Online (Sandbox Code Playgroud)
如果他们实施以下方式会更好:
int[] a = {34, 23, 12};
a.sort();
Run Code Online (Sandbox Code Playgroud)
任何人都能解释一下这个吗?
Pet*_*rey 41
在Java中,没有办法扩展数组的功能.数组都继承自Object
但是这几乎没有.恕我直言这是Java的缺陷.
相反,为了添加数组的功能,静态实用程序方法被添加到类Array
和的类中Arrays
.这些方法static
不是实例方法.
Asa*_*aph 18
很好的观察.另请注意,并非每个数组都可以进行排序.只能对实现Comparable
接口的基元和对象数组进行排序.因此sort()
,不可能采用适用于所有阵列的通用方法.因此,对于每个实际可排序的受支持类型,我们有几个重载的静态方法.
@Holger在下面的评论中正确地指出,其中一个重载的静态方法确实存在,Arrays.sort(Object[])
但文档明确指出:
数组中的所有元素都必须实现
Comparable
接口.
因此它不适用于未实现的对象Comparable
或其子接口之一.
Dar*_*usz 13
首先,Arrays
是一个实用程序类,它正是这样做的:暴露静态方法.它与任何arr[]
实例分开,并且与它没有OO关系.有几个类,像Collections
或各种类StringUtils
.
数组是集合,它们用于存储数据.Arrays.sort()
是一种对集合进行排序的算法.可能有许多其他算法以不同的方式对数据进行排序,所有这些算法都将以相同的方式使用:MyAlgorithm.doSthWithArray(array)
.即使sort()
数组上有一个方法(它必须是一个SortableArray
,因为并非所有的对象都可以自动排序),所以其他所有算法都必须以旧的方式调用.除非引入了访问者模式......但这会使事情变得太复杂,因此,没有任何意义.
对于Java Collection来说Collections.sort()
,即使在C++中也有std::sort
类似的功能,就像qsort
在C中一样.我没有看到问题,我看到一致性.
归档时间: |
|
查看次数: |
3207 次 |
最近记录: |