我的老师给了我这个类比,用我正在写的方法。 我仍然不明白为什么 add 方法返回布尔值?
它什么都不返回不是更有意义吗?
这来自Collection<E>
接口,由于该接口用作各种集合的祖先类,因此返回一个boolean
来通知add
是否有效地更改了集合是有意义的。
这对于像Set<T>
这样的集合很有用,如果添加的元素已经存在于集合中,则不会更改。在List<T>
的情况下,Java通过设计强制返回true
,所以如果你想通知调用者操作没有成功,你必须找到另一种方法(例如抛出异常)。
这在Collection<E>.add
文档中有明确说明:
如果集合出于任何原因拒绝添加特定元素,而不是因为它已经包含该元素,则必须引发异常(而不是返回 false)。这保留了集合在此调用返回后始终包含指定元素的不变性。
基本上,返回的值并不表示失败,但如果成功的添加操作更改了集合。必须通过引发异常来通知任何失败。
Javadoc forArrayList.add(E)
解释说它
返回: true (由 Collection.add(E) 指定)
哪个说
返回: 如果此集合因调用而更改,则为 true
如果它没有返回boolean
,则调用方必须测试List
或检查Exception
否则将无法判断调用是否成功。我认为返回boolean
更容易(也更快)。
简单地说(这就是帮助我理解它的原因)。 您返回的布尔值表示您的add()
已成功。
考虑一下,如果您没有返回布尔值,您怎么知道您成功添加了某些内容?您必须手动检查以查看您确实添加了某些内容。这是"不必要的",但它很聪明。