【问题标题】:Uniqueness of an attribute in an object对象中属性的唯一性
【发布时间】:2014-12-14 21:41:39
【问题描述】:
我创建了一个新类,其中有一个名为 Name 的属性。
我试图让这个属性“独一无二”。我的意思是,如果我创建一个名为“AA”的对象,就不可能创建另一个名为“AA”的对象。
我该如何解决这个问题?
编辑:
问题是我必须在另一个类中创建这些对象(我们称之为“Main.java”)。
【问题讨论】:
标签:
java
attributes
unique
【解决方案1】:
一个选项是在你的类中维护一个静态的 Set,其中包含以前使用的所有名称。当一个新实例被创建时,你检查给新实例的名字是否已经被使用(假设这个名字被传递给了构造函数)。如果是,则抛出异常。如果没有,则将其添加到 Set 中。
如果你有一个公共的setName 方法,你也应该检查该方法中传递的名称,如果没有使用该名称,则从静态 Set 中删除实例的旧名称并添加新名称。
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;
}
}
请注意,此实现不是线程安全的,因此如果此类可能被多个线程使用,则必须安全地添加线程。