我创建了一个新类,其中有一个名为Name的属性。 我试图让这个属性“独特”。我的意思是,如果我创建一个名为“AA”的对象,则无法创建另一个名为“AA”的对象。 我该如何设法解决这个问题?
编辑: 问题是我必须在另一个类中创建这些对象(我们称之为“Main.java”)。
答案 0 :(得分: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;
}
}
请注意,此实现不是线程安全的,因此如果多个线程可能使用此类,则必须安全地添加线程。