4

我希望这听起来不会是个愚蠢的问题。

我有一个 A 类和一个 B 类。现在 B 唯一拥有的是一个字符串 ID。现在我可以有多个对象 A,每个对象可以有 0 个或多个 B 类型的对象。这些对象包含在每个类 A 具有的 HashMap(ID,someData) 中。

我想要做的是每次我在 A 类中添加一个新 ID 以检查在我拥有的任何其他 A 类对象中是否已经存在具有相同 ID 的 B 类对象,如果没有,则创建一个新的B 对象。

希望这是有道理的。如果我问的问题在某种程度上是错误的,请善意地解释这是一种不好的做法或概念上的错误。

非常感谢。

编辑:更清楚地说,在我的情况下,不希望为我的所有对象共享 HashMap(ID,someData),例如假设 A 是课程类、目录或银行等。每个 A 类可能共享一些学生/客户,但每个 A 类可能包含不同的 B 类对象。

4

5 回答 5

4

这不是一个坏习惯,看起来你正在实施Instance Manager Pattern

  • 能够查找托管对象的一个​​或多个实例(通过键)。如果只有一个托管对象,则不需要密钥。
于 2012-03-05T10:00:21.823 回答
0

您需要做的是收集所有 A 对象,以便您可以检查它们。随着您获得更多 A 对象,这将变得更加低效。一个不同的结构可能是在您收集时使用 ID。

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

这允许您确保 ID 在所有 A 中的唯一性。

于 2012-03-05T10:00:51.980 回答
0

为了达到您的目的,您可以使 HashMap 成为static变量,而不是实例变量。因此,它将在 A 类的所有实例之间共享。

于 2012-03-05T10:01:47.410 回答
0

如果我是你,我会创建一个 B_Factory 类。此类将负责创建 B 对象。A 类对象会调用 B_Factory 方法来添加或删除 B 对象。在 B_Factory 中,您可以使用 Map 来存储 B 对象的实例。

B_Factory 类的实例应该只有一个,它将被注入到所有 A 实例中。

于 2012-03-05T10:05:26.530 回答
0

您应该遍历所有 A 实例并使用 Hashmaps containsKey 方法检查新的 B 值是否已存储。如果您只需将所有 B 值存储到每个 A 类一次,则可以为 HashMap 字段添加静态修饰符。

于 2015-08-16T08:22:44.380 回答