当我看到Iterable接口源时,看起来foreach
方法和Spliterator
方法不是抽象的。接口如何具有非抽象方法?或者我有什么遗漏?请参阅下面的Iterbale
界面来源。
package java.lang;
import java.util.Iterator;
import java.util.Objects;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
public abstract interface Iterable<T>
{
public abstract Iterator<T> iterator();
public void forEach(Consumer<? super T> paramConsumer)
{
Objects.requireNonNull(paramConsumer);
Iterator localIterator = iterator();
while (localIterator.hasNext())
{
Object localObject = localIterator.next();
paramConsumer.accept(localObject);
}
}
public Spliterator<T> spliterator()
{
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
/* Location: C:\Program Files\Java\jre1.8.0_121\lib\rt.jar
* Qualified Name: java.lang.Iterable
* Java Class Version: 8 (52.0)
* JD-Core Version: 0.7.1
*/
答案 0 :(得分:2)
使用Java 8,您可以在界面中定义default implementation。
这是java.lang.Iterable
的作用:
public interface Iterable<T> {
...
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
...
}
您的实际代码并未引用Java 8源代码。