据我所知,在一个Set中只允许根据.equals()的任何对象的一个实例,如果你已经拥有一个等效的对象,你不应该“需要”从Set中获取一个对象,但我仍然希望有一个.get()方法,它给出一个等效对象作为参数的Set(或null)中对象的实际实例.
关于它为什么这样设计的任何想法/理论?
我通常不得不通过使用Map并使键和值相同或类似的东西来解决这个问题.
编辑:到目前为止,我认为人们不理解我的问题.我想要已经在集合中的确切对象实例,而不是可能不同的对象实例,其中.equals()返回true.
至于为什么我会想要这种行为,通常.equals()不会考虑对象的所有属性.我想提供一些虚拟查找对象并获取Set中的实际对象实例.
解决方法:
虽然pure参数确实使方法get(Object)成为可疑,但潜在的意图并非没有实际意义.
有各种类和接口系列稍微重新定义equals(Object).只需要集合界面就可以了.例如,ArrayList和LinkedList可以相等;它们各自的内容只需要是相同的并且顺序相同.
因此,找到集合中的匹配元素有很好的理由.也许更明确的表达意图的方法是使用类似的方法
public interface Collection extends ... {
...
public E findMatch(Object o) throws UnsupportedOperationException;
...
}
请注意,此API的值大于Set中的值.
至于问题本身,我没有任何关于为什么省略这种操作的理论.我会说最小生成集参数不成立,因为集合API中定义的许多操作都是出于方便和高效的原因.
标签:java,collections,generics
来源: https://codeday.me/bug/20190926/1821536.html