我创建了一个新类,其中有一个名为“Name”的属性。 我正在努力使这个属性变得“独特”。我的意思是,如果我创建一个名为“AA”的对象,则无法创建另一个名为“AA”的对象。 我该如何解决这个问题?
编辑: 问题是我必须在另一个类中创建这些对象(我们称之为“Main.java”)。
最佳答案
一个选择是在您的类中维护先前使用的所有名称的静态集。创建新实例时,您检查赋予新实例的名称是否已在使用中(假设该名称已传递给构造函数)。如果是,则抛出异常。如果没有,请将其添加到集合中。
如果您有一个公共(public) 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;
}
}
请注意,此实现不是线程安全的,因此如果此类可能由多个线程使用,则必须安全地添加线程。
关于java - 对象中属性的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474457/