对象中属性的唯一性

时间:2014-12-14 21:41:39

标签: java attributes unique

我创建了一个新类,其中有一个名为Name的属性。 我试图让这个属性“独特”。我的意思是,如果我创建一个名为“AA”的对象,则无法创建另一个名为“AA”的对象。 我该如何设法解决这个问题?

编辑: 问题是我必须在另一个类中创建这些对象(我们称之为“Main.java”)。

1 个答案:

答案 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;         
    }
}

请注意,此实现不是线程安全的,因此如果多个线程可能使用此类,则必须安全地添加线程。