【问题标题】:Idiom for Iterable with size() - between Iterable and Collection?带有 size() 的 Iterable 的成语 - 在 Iterable 和 Collection 之间?
【发布时间】:2012-09-24 17:57:04
【问题描述】:

Collection 是具有大小的Iterable,您可以检查其包含情况以及添加或删除元素。我有继承Iterable 并具有大小的对象,但没有集合的其他功能。我不想实现带有“不支持”异常的Collection 方法。

IterableCollection 之间是否有一些常用的中间类,我可以扩展我的对象?像'SizedIterable'这样的东西?或者,更一般地说,一个合适的成语?

注意:是的,它确实不能检查成员资格,但有一个大小。

【问题讨论】:

  • ...如果你可以迭代它,你可以通过详尽的搜索来检查成员资格,不是吗?

标签: java collections size idioms iterable


【解决方案1】:

为什么不创建自己的扩展Iterable 的接口?这样您就可以定义要添加到自定义对象的功能。

大概是这样的

public interface SizedIterable<T> extends Iterable<T> {
    int size();
}

【讨论】:

  • 因为我可能正在重新发明轮子……如果有约定,我想使用它。
  • 我认为约定是@Gamb 所建议的。如果我是你,我会这样做
  • @MyNameIsTooCommon 感谢您为该编辑付出了额外的努力,我完全错过了它,这是必要的。
  • 这里是Java中集合接口的不足之处,如果你需要SizedInterface来处理现有的类,你需要duck typing
【解决方案2】:

简短的回答是否定的。

长答案:这个接口有没有必要?你打算用它做什么?除非您有许多具有相同(相当不寻常)属性的不同类,以及一些依赖它的方法,否则我想不出对这个接口有任何明显的需求。

您是否打算将此对象传递给标准库函数/类?这些方法真的会调用 size() 吗?

如果是这样,您可能只需要实现 Collection,然后酌情对 add()/remove()/contains()/etc 进行无操作。

如果没有,并且您确实需要这个接口,那么扩展 Iterable 是一个好方法。

例如

public interface SizedIterable<T> extends Iterable<T> {
    public int size();
}

【讨论】:

  • 按顺序回答:我不知道,这就是我问的原因。我确实有许多不同的此类课程。不打算将它传递给标准函数,除非是 Iterable。不过谢谢你的回答...
猜你喜欢
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2016-08-20
  • 2012-07-03
  • 2021-04-09
  • 2011-09-18
  • 2012-01-04
  • 2016-06-27
相关资源
最近更新 更多