Java классы и конструкторы - PullRequest
4 голосов
/ 05 марта 2012

Надеюсь, это не будет звучать глупо.

У меня есть класс A и класс B. Теперь у B есть только идентификатор строки.Теперь у меня может быть несколько объектов A, каждый из которых может иметь 0 или более объектов типа B. Они содержатся в HashMap (ID, someData) каждого класса A.

То, что я хочу делать, - это каждый раз, когда ядобавьте новый идентификатор в класс A, чтобы проверить, существует ли уже объект on типа B с таким же идентификатором в любом из других объектов класса A, которые у меня есть, и, если нет, создайте новый объект B.

Надеюсь, это имеет смысл.Если то, что я спрашиваю, неверно, каким-то образом, пожалуйста, будьте любезны объяснить, как это плохо или концептуально неправильно.

Большое спасибо.

РЕДАКТИРОВАТЬ: Чтобы быть более ясным, вв моем случае нежелательно делиться HashMap (ID, someData) для всех моих объектов, например, скажем, A - это класс курса, или каталог, или банк и т. д. Каждый класс A может иметь несколько студентов / клиентов, но каждый Aкласс может содержать разные объекты класса B.

Ответы [ 5 ]

4 голосов
/ 05 марта 2012

Это неплохая практика, похоже, что вы реализуете шаблон Instance Manager .

  • Возможность поиска одного или нескольких экземпляров (с помощью ключа) управляемого объекта (ов). Если только один управляемый объект, тогда ключ не требуется.
0 голосов
/ 16 августа 2015

Вы должны перебрать все ваши экземпляры A и использовать метод Hashmaps containsKey, чтобы проверить, что новое значение B уже сохранено или нет. Если вам нужно сохранить все значения B для каждого класса A только один раз, вы можете добавить статический модификатор для своего поля HashMap.

0 голосов
/ 05 марта 2012

На вашем месте я бы создал класс B_Factory. Этот класс будет отвечать за создание объектов B. Объекты класса будут вызывать методы B_Factory для добавления или удаления объекта B. Внутри B_Factory вы можете использовать карту для хранения экземпляров объектов B.

Должен быть только один экземпляр класса B_Factory, который будет внедрен во все экземпляры A.

0 голосов
/ 05 марта 2012

Для достижения вашей цели вы можете сделать HashMap переменной static вместо переменной экземпляра. Следовательно, он будет общим для всех экземпляров класса А.

0 голосов
/ 05 марта 2012

Для этого вам нужно иметь коллекцию всех объектов A, чтобы вы могли проверить их все.По мере того, как вы получаете больше объектов A, это станет более неэффективным.Различным было структурировать это, возможно, использовать идентификатор как коллекцию.

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

Это позволяет вам гарантировать уникальность идентификатора для всех A.

...