gpt4 book ai didi

java - 为什么 Set.add 不返回对象?

转载 作者:行者123 更新时间:2023-11-29 06:29:41 25 4
gpt4 key购买 nike

为什么 Set.add()不返回您尝试添加的对象,或者返回与您尝试添加的对象相同的对象(如果它已经在集合中)?

我可以有一个具有两个属性的对象,但是在 hashcode()/equals() 方法中只考虑了其中一个属性(然后使用我不考虑的属性 hashcode()/equals().

一个简单的答案是 Set 扩展了 Collection 接口(interface),但这并不令人满意;那么问题是为什么 Set 没有额外的方法来完成我想要它做的事情,例如:set.addObject()

我知道我可以使用 Map.getOrDefault , 但我需要指定 map 的两个参数。

最佳答案

A simple answer is that Set extends the Collection interface, but that is not satisfying

满足与否,<​​em>是为什么 add 返回一个 boolean 而不是 Object 的答案在 Set 中; Collection.add 返回一个 boolean 值以指示基础集合是否已更改。

一般来说,您会返回什么来指示未添加元素,请记住“已在集合中”不是不添加元素的唯一原因?

为什么没有 addObject 方法的问题是完全独立的,并且是基于意见的: 可能认为它有用,但 API 设计者要么:

  • 没有考虑添加它,因为他们认为没有必要;
  • 考虑过它,但认为它没有用处,因为在极少数情况下您可以通过其他方式来实现此功能。
  • 认为它可能有用,但后来无法修改接口(interface)以添加新方法,因为这会破坏 Set 的现有实现。

    这显然是可能的,因为接口(interface)可以有默认的方法实现;但我们又回到了上面的其他两个原因。


其实,我收回上面所说的“‘已经在集合中’不是不添加元素的唯一原因”。

根据 the Javadoc of Collection.add :

Returns true if this collection changed as a result of the call. (Returns false if this collection does not permit duplicates and already contains the specified element.)

所以,好吧,这应该是唯一的原因。但是你一定想知道为什么它会有用,比如说,对于 List 返回你刚刚添加的元素。

关于java - 为什么 Set.add 不返回对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39079605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com