2012-03-05 184 views
4

我希望這聽起來不像一個愚蠢的問題。Java類和構造函數

我有一個類A和一個類B.現在唯一的東西B是一個字符串ID。 現在我可以擁有多個對象A,每個對象可以有0個或更多類型爲B的對象。 這些包含在每個類A具有的HashMap(ID,someData)中。

我想要做的是每次我在A類中添加一個新ID以檢查是否已有 是B類型的對象,並且在我擁有的任何其他A類對象中具有相同的ID,並且if不是,創建一個新的B對象。

希望這是有道理的。如果我所問的是某種錯誤,請善意解釋一下 這是一種錯誤的做法或概念錯誤。

非常感謝。

編輯:爲了更清楚,在我的情況下,不希望共享我的所有對象的HashMap(ID,someData),例如讓我們說A是課程類,或目錄或銀行等。每個A類可以共享一些學生/客戶,但是每個A類可以包含不同的B類對象。

回答

4

這不是不好的做法,好像你正在執行Instance Manager Pattern

  • 能力來查找管理對象(一個或多個)的一個或多個實例(通過鍵)。如果只有一個託管對象,則不需要密鑰。
0

你需要做的事情是擁有所有A對象的集合,以便你可以檢查它們。當你獲得更多的A對象時,這將變得更加低效。一個不同之處在於這可能是使用ID作爲你的收藏。

Map<ID,/* class with A and someData *> map = ... 

這可以讓你確保所有A.

0

爲了達到你的目的標識的唯一性,可以使,而不是一個實例變量的HashMap中的static變量。因此,它將在A類的所有實例之間共享。

0

如果我是你,我會創建一個B_Factory類。這個類將負責創建B對象。類對象會調用B_Factory方法來添加或刪除B對象。在B_Factory內部,您可以使用Map來存儲B對象的實例。

應該只有一個B_Factory類的實例,它將被注入到所有的A實例中。

0

您應該遍歷所有A實例並使用HashMap的containsKey方法檢查新的B值是否已存儲。如果您只需要將所有B值存儲到每個A類,那麼您可以爲您的HashMap字段添加一個靜態修飾符。