【问题标题】:Uniqueness of an attribute in an object对象中属性的唯一性
【发布时间】:2014-12-14 21:41:39
【问题描述】:

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

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

【问题讨论】:

  • 使用包含字符串集或映射的factory
  • 工厂或静态工厂方法(注意线程安全!

标签: 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;         
    }
}

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

【讨论】:

  • 我冒昧地更改了几行。
猜你喜欢
  • 2010-09-11
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2012-06-11
  • 2013-09-17
相关资源
最近更新 更多