java - 对象中属性的唯一性

标签 java attributes unique

我创建了一个新类,其中有一个名为“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/

相关文章:

java - 如何将JSP的结果存储在字符串中?

c# - 如何在检查器中隐藏继承的公共(public)变量?

r - 当一个变量实际上是两列时 expand.grid

java - Java中获取 "cmd.exe"的输出流

java - 如何正确对齐标签?

javascript - 在 R Leaflet 中实现 (javascript) 插件

c# - 在 C# 属性中替换字符串

java - 如何在 Javascript 中访问模型属性

r - 在 R data.frame 中设置从零开始的唯一 ID

python - 在 numpy.array 中查找唯一行