2014-12-14 5 views
1

Я создал новый класс, в котором есть атрибут Name. Я пытаюсь сделать этот атрибут «уникальным». Я имею в виду, что если я создам объект с именем «AA», невозможно создать другой объект с именем «AA». Как я могу решить эту проблему?Уникальность атрибута в объекте

EDIT: Проблема в том, что я должен создавать эти объекты в другом классе (назовем его «Main.java»).

+1

Используйте [factory] (http://www.tutorialspoint.com/design_pattern/factory_pattern.htm), содержащий набор или карту строк. – khelwood

+0

Либо завод, либо статический заводский метод (остерегайтесь безопасности нитей! – fge

ответ

2

Одним из вариантов является сохранение в вашем классе статического набора всех ранее используемых имен. Когда создается новый экземпляр, вы проверяете, действительно ли имя, присвоенное новому экземпляру, используется (при условии, что имя передается конструктору). Если это так, вы делаете исключение. Если нет, добавьте его в Set.

Если у вас есть общедоступный метод setName, вы должны также проверить переданное имя в этом методе, а если имя не используется, удалите старое имя экземпляра из статического набора и добавьте новое имя.

public class ObjectWithName 
{ 
    private static final Set<String> names = new HashSet<String>(); 

    private String name; 

    public ObjectWithName (String name) throws SomeException 
    { 
     if (!names.add(name)) 
      throw new SomeException(); 
     this.name = name; 
    } 

    public void setName (String name) throws SomeException 
    { 
     if (names.contains(name)) 
      throw SomeException(); 
     if (this.name != null) 
      names.remove(this.name); 
     names.add(name); 
     this.name = name;   
    } 
} 

Обратите внимание, что эта реализация не поточно, так что вы должны добавить нить безопасно, если этот класс может использоваться несколькими потоками.

+0

Я взял на себя смелость изменить пару строк. –

+0

Это сработало! Спасибо! :) – Ganjira

Смежные вопросы