Java 如何确保集合只包含接口的每个实现中的一个

Java 如何确保集合只包含接口的每个实现中的一个,java,collections,instanceof,Java,Collections,Instanceof,我有一个接口MyInterface,有许多实现和一个集合Collection 现在我如何确保此集合中没有两个元素属于同一类型 和我如何防止任何条目被覆盖 这意味着在任何给定的时间点,集合中每个实现只有一个实例 由于明显的原因,我无法向接口添加默认的equals(objectobj)实现。 我也不能以任何方式保证每个实现都会覆盖equals(objectobj)方法(为了彻底起见,这里很明显) 我目前看到的唯一方法是创建一个抽象类MyAbstractClass。但这似乎有些过分(?)您也可以使用映

我有一个接口
MyInterface
,有许多实现和一个集合
Collection

现在我如何确保此集合中没有两个元素属于同一类型

我如何防止任何条目被覆盖

这意味着在任何给定的时间点,集合中每个实现只有一个实例

由于明显的原因,我无法向接口添加默认的
equals(objectobj)
实现。 我也不能以任何方式保证每个实现都会覆盖
equals(objectobj)
方法(为了彻底起见,这里很明显)


我目前看到的唯一方法是创建一个抽象类
MyAbstractClass
。但这似乎有些过分(?)

您也可以使用
映射,如果您愿意,请参阅Collections.newSetFromMap以了解如何实现映射支持的集合。请注意,在运行时,您的映射可能会被各种类型的类作为键填充。你可以使用
map你说的“确保”到底是什么意思?防止它发生,或者事后检查?基本上,我认为您应该在每个实例上调用
getClass()
,并保留一个
Set
。如何防止条目被重写?@dot\u Sp0T您可以在调用
map.containsKey(obj.getClass())
之前检查是否
map.put(obj.getClass(),obj)
。添加了第二个问题。如果您能在回答中添加您的评论,我将不胜感激:)-始终尝试预测是什么让其他用户想到这个问题
Map<Class<?>,MyInterface> map = new HashMap<>();
...
if (!map.containsKey(obj.getClass())) {
    map.put(obj.getClass(),obj);
}