2012-03-04 83 views
5

只是一个简单的问题,但为什么数组中没有封装为length?这仅仅是编程的初学者,因为我觉得getLength()方法很容易实现。数组中的长度

+0

相关:http://stackoverflow.com/q/9297899/697449 – 2012-03-04 01:43:16

+1

投票重新打开。海事组织,这不是一个链接问题的重复。这个问题是为什么Java设计者没有**封装**长度字段。 (链接的问题是关于数组与字符串的API一致性......这是一个非常不同的问题。) – 2012-03-04 01:54:55

+2

此外,它是(IMO)和**有趣的问题,值得回答。 – 2012-03-04 02:03:29

回答

1

我有一个假设,但我不能说这是java的设计者为什么那样做的原因。

数组是一个固定长度的容器(当然还有一个对象)。它是一个非常基本的,所以在这种情况下封装将是很好,但不是关键。以ArrayList为例,可以将其视为数组的封装。

基本数组与封装它的其他类型相比有许多优点。所以也许当Java的第一个版本出来时,它缺少今天大部分的优化。因此,使用数组的简单性(在性能方面)具有数据结构是一件好事。

而且这可能是因为他们没有想到,在那个时候,后来他们不得不保持向后兼容性:)

无论如何,如果你觉得有趣的东西有关(也许你可以电子邮件一样简单的太阳/ oracle)请发帖! 这是一个很好的问题。

0

虽然数组可能被解释为对象,但它们实际上只是一组包含其他对象或变量的固定内存地址。通过这种方式,他们有属性,如.length,但不一定方法,如.getLength()

了很多有关阵列的信息可以在这里找到: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+1

'[需要的引证]' – delnan 2012-03-04 01:39:59

+1

这个解释不成立。事实上,数组有'Object'作为它们的隐式超类,因此DO有一堆方法。由此可见,Java设计者*可以为所有数组定义一个“length()”方法。 (应用程序不能添加方法的事实在这里并不相关。) – 2012-03-04 02:02:04

0

这将是很容易实现,这就是为什么它没有被执行。

数组只是存储块,没有真正的控件。当不需要高级控制时,它们实现了一种简单快捷的存储方法。

您可以使用列表,队列,链接列表,双链表等可以记录其大小的记录(如果需要)。显然,取决于你使用的语言,你可能必须自己创建这些语言。

如果你想拥有一个数组的长度并且仍然使用一个简单的数组,你可以在每次添加东西时加1到count变量,每次删除东西时减1。这将执行与getLength()方法相同的功能。

+3

什么?长度*是*存储的,它不是通过getter方法公开的,而是通过公共成员公开的。 – delnan 2012-03-04 01:42:43