重复的Iterable和Collection Hamcrest匹配器

时间:2015-12-14 15:16:06

标签: java hamcrest

我看到Hamcrest for Java为执行相同匹配的IterableCollection定义了一些匹配器。

例如,iterableWithSize()中的IsIterableWithSizehasSize()中的IsCollectionWithSize。据我所知,后者是没有必要的,因为任何集合都可以传递给Iterable版本。

设计API是否有任何技术解释,IterableCollection是单独处理的?

1 个答案:

答案 0 :(得分:1)

Collection接口包含加速某些匹配器的方法,否则这些匹配器需要迭代所有元素。

您提供的示例就是这样一种方法。比较确定实际值大小的两种方法:

protected Integer featureValueOf(Iterable<E> actual) {
  int size = 0;
  for (Iterator<E> iterator = actual.iterator(); iterator.hasNext(); iterator.next()) {
    size++;
  }
  return size;
}

protected Integer featureValueOf(Collection<? extends E> actual) {
  return actual.size();
}

只要size的实现本身并不遍历所有元素,后者就会快得多。