从Java 9开始,Iterable
定义如下(为简洁起见,没有文档):
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
我们可以看到,这个接口只包含一个抽象方法。由于此接口中的一个或多个方法使用default
关键字,因此自Java 8发布以来必须编辑此接口(文档定义@since 1.8
,但未包含在此问题中)。
出于这些原因,为什么Iterable
未使用@FunctionalInterface
注释定义?