簡體   English   中英

如何確保集合僅包含接口的每個實現之一

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM