[英]Returning an interface object from a method without instantiating an (unknown) concrete type
[英]Instantiating object without knowing the concrete type
我正在創建以下Java類。
class EntityCollection <E extends Entity, M extends Hashmap<?,E>> {
}
這個想法是,此類的用戶將告訴我在集合和實際存儲中要保存什么類型的對象。 因此,M可以是簡單的Hashmap或LinkedHashmap。
我在這里有兩個問題:我如何在課堂上實例化M? 可能嗎?
和
這是一個好方法還是應該使用一些StoreFactory來退還我的商店以供使用? 我應該把它帶到此類的構造函數中嗎?
創建哈希圖很容易,您只需傳遞通用類型-甚至使用菱形符號即可為您完成。
M m = new HashMap<>();
麻煩的是,您還希望能夠選擇地圖的類型。 這可以通過多種方式完成:
您可以使用Factory模式並傳入一個按需創建地圖的工廠對象。
您可以在類外部生成Map並將其傳遞給構造函數。
有一個抽象的方法來創建地圖。 當創建類的實例時,人們將實現該抽象方法並為其生成映射。
對於第二個問題,如果沒有更多關於您正在做的事情的詳細信息,就無法知道。 這是一個體系結構上的決定,很可能不適合堆棧溢出問答。但是,這似乎有些混亂,您要暴露類的許多內部行為。 您最好多考慮所需的行為和提供該功能的接口,而不要考慮實現的細節。
例如,您可能有一個enum { UNSORTED, INSERTION_ORDER, etc }
,然后根據該枚舉實例化正確的Map。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.