簡體   English   中英

在不知道具體類型的情況下實例化對象

[英]Instantiating object without knowing the concrete type

我正在創建以下Java類。

class EntityCollection <E extends Entity, M extends Hashmap<?,E>> {
}

這個想法是,此類的用戶將告訴我在集合和實際存儲中要保存什么類型的對象。 因此,M可以是簡單的Hashmap或LinkedHashmap。

我在這里有兩個問題:我如何在課堂上實例化M? 可能嗎?

這是一個好方法還是應該使用一些StoreFactory來退還我的商店以供使用? 我應該把它帶到此類的構造函數中嗎?

由於類型擦除,您無法按照設置的方式進行操作。 您可以通過讓他們將課程傳遞給您來實現。

讀一讀:

在Java中創建泛型類型的實例?

創建哈希圖很容易,您只需傳遞通用類型-甚至使用菱形符號即可為您完成。

M m = new HashMap<>();

麻煩的是,您還希望能夠選擇地圖的類型。 這可以通過多種方式完成:

  • 您可以使用Factory模式並傳入一個按需創建地圖的工廠對象。

  • 您可以在類外部生成Map並將其傳遞給構造函數。

  • 有一個抽象的方法來創建地圖。 當創建類的實例時,人們將實現該抽象方法並為其生成映射。

對於第二個問題,如果沒有更多關於您正在做的事情的詳細信息,就無法知道。 這是一個體系結構上的決定,很可能不適合堆棧溢出問答。但是,這似乎有些混亂,您要暴露類的許多內部行為。 您最好多考慮所需的行為和提供該功能的接口,而不要考慮實現的細節。

例如,您可能有一個enum { UNSORTED, INSERTION_ORDER, etc } ,然后根據該枚舉實例化正確的Map。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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