复制 Iterable 和 Collection Hamcrest 匹配器
Duplicate Iterable and Collection Hamcrest matchers
我看到 Java 的 Hamcrest 为 Iterable
和 Collection
定义了一些执行相同匹配的匹配器。
例如,IsIterableWithSize
中的 iterableWithSize()
和 IsCollectionWithSize
中的 hasSize()
。据我所知,后者不是必需的,因为任何集合都可以传递给 Iterable
版本。
是否有任何技术解释来设计 API 以便 Iterable
和 Collection
分开处理?
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
的实现本身不遍历所有元素,后者会快得多。
我看到 Java 的 Hamcrest 为 Iterable
和 Collection
定义了一些执行相同匹配的匹配器。
例如,IsIterableWithSize
中的 iterableWithSize()
和 IsCollectionWithSize
中的 hasSize()
。据我所知,后者不是必需的,因为任何集合都可以传递给 Iterable
版本。
是否有任何技术解释来设计 API 以便 Iterable
和 Collection
分开处理?
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
的实现本身不遍历所有元素,后者会快得多。