为什么Iterable接口中的forEach方法不是抽象的? [英] Why the forEach method in Iterable interface is not abstract?
本文介绍了为什么Iterable接口中的forEach方法不是抽象的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我看到Iterable接口源时,似乎 foreach
方法和 Spliterator
方法不是抽象的。接口如何具有非抽象方法?还是我有什么想念的?请参见下面的 Iterbale
接口源。
When I see the Iterable interface source, it looks like the foreach
method and Spliterator
methods are not abstract. How an interface can have non abstract methods? Or is there anything I am missing in this? See the Iterbale
interface source below.
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
*/
推荐答案
使用Java 8,您可以定义接口的默认实现。
java.lang.Iterable
的作用是:
With Java 8 you can define a default implementation in the interface.
It is what java.lang.Iterable
does :
public interface Iterable<T> {
...
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
...
}
您的实际代码未引用Java 8源代码。
Your actual code doesn't refer the Java 8 source code.
这篇关于为什么Iterable接口中的forEach方法不是抽象的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文