[英]How to make sure a collection only contains one of each of the implementations of an interface
我有一個具有大量實現的接口MyInterface
和一個Collection Collection<MyInterface>
。
現在我如何 確保此Collection中沒有兩個元素屬於同一類型 ?
我怎樣才能防止任何條目 被覆蓋 ?
意味着在任何給定的時間點只有集合中每個實現的1個實例。
出於顯而易見的原因,我無法向接口添加默認的equals(Object obj)
實現。 我也不能以任何方式保證每個實現都覆蓋equals(Object obj)
方法(顯而易見但是為了徹底性而在這里)。
我目前看到的唯一方法是創建一個抽象類MyAbstractClass
。 但這似乎有點矯枉過正(?)
您可以使用Map<Class<?>,MyInterface>
而不是Collection<MyInterface>
。 關鍵是實施Class
。 這將確保每種類型的最多一個實例可以添加到Map
。
以下是如何初始化地圖並向其添加條目而不覆蓋現有條目:
Map<Class<?>,MyInterface> map = new HashMap<>();
...
if (!map.containsKey(obj.getClass())) {
map.put(obj.getClass(),obj);
}
此外,如果您願意,請參閱Collections.newSetFromMap以了解如何實現由Map支持的Collection。 請注意,在運行時,您的地圖可以填充各種類作為鍵。 你可以使用Map<Class<? extends MyInterface>, MyInterface>
Map<Class<? extends MyInterface>, MyInterface>
以獲得至少一個編譯時保護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.