Одним из вариантов является сохранение в вашем классе статического набора всех ранее используемых имен. Когда создается новый экземпляр, вы проверяете, действительно ли имя, присвоенное новому экземпляру, используется (при условии, что имя передается конструктору). Если это так, вы делаете исключение. Если нет, добавьте его в 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;
}
}
Обратите внимание, что эта реализация не поточно, так что вы должны добавить нить безопасно, если этот класс может использоваться несколькими потоками.
Используйте [factory] (http://www.tutorialspoint.com/design_pattern/factory_pattern.htm), содержащий набор или карту строк. – khelwood
Либо завод, либо статический заводский метод (остерегайтесь безопасности нитей! – fge