【问题标题】:Creating a collection with single object per class为每个类创建一个包含单个对象的集合
【发布时间】:2013-08-17 12:06:23
【问题描述】:

在 Java 中是否存在可用于存储唯一类对象的集合?

例如,我有一个父类 (Parent) 和几个直接继承自 Parent 的子类(ChildAChildB 等)。

现在,我需要将每个类的实例存储在一个集合中 (Collection<Parent>)。当我将ChildA 添加到集合中一次时,我一定无法添加更多ChildA

我希望能够通过调用get(ClassB.class) 来检索每个实例,并以类似的方式将其删除。

是否已经存在提供该功能的集合,还是我必须编写自己的实现?

【问题讨论】:

  • 嗯,你可以随时使用Set
  • Set 允许我在其中存储两个不同的ClassA 实例吗?这不是我要找的。​​span>
  • 您可以创建您自己的扩展 Set(例如 HashSet)的类。覆盖 add() 方法以合并您想要的唯一性的逻辑。如果类的对象不存在,则迭代现有集合,然后添加 else 抛出运行时异常。
  • 我认为在 Java 中没有任何您需要的内置实现。您必须编写自己的实现。
  • @rocketboy 好的,谢谢。

标签: java collections


【解决方案1】:

编写您自己的使用Map<Class<? extends Parent>, Parent> 的类:

private Map<Class<? extends Parent>, Parent> map = new HashMap<>();

public void add(Parent p) {
    if (!map.containsKey(p.getClass()) {
        map.put(p.getClass(), p);
    }
}

public Parent get(Class<? extends Parent> clazz) {
    return map.get(clazz);
}

【讨论】:

  • 这是一个不错的解决方案。谢谢!
【解决方案2】:
猜你喜欢
  • 2014-01-21
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多