如何确保集合仅包含接口的每个实现之一

dot*_*p0T 3 java collections instanceof

我有一个MyInterface具有众多实现和集合的接口Collection<MyInterface>.

现在怎么样,我可以保证的是有没有 2种元素在这集是同一类型的

如何我可以阻止任何进入被覆盖

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

出于显而易见的原因,我无法equals(Object obj)在界面中添加默认实现.我也不能以任何方式保证每个实现都会覆盖该equals(Object obj)方法(显而易见但是为了彻底性而在这里).

我目前看到的唯一方法是创建一个抽象类MyAbstractClass.但这似乎有点矫枉过正(?)

Era*_*ran 7

你可以使用a Map<Class<?>,MyInterface>而不是a Collection<MyInterface>.关键是实施Class.这将确保每种类型的最多一个实例可以添加到Map.

以下是如何初始化地图并向其添加条目而不覆盖现有条目:

Map<Class<?>,MyInterface> map = new HashMap<>();
...
if (!map.containsKey(obj.getClass())) {
    map.put(obj.getClass(),obj);
}
Run Code Online (Sandbox Code Playgroud)