gpt4 book ai didi

java - 为什么Iterable接口(interface)中的forEach方法不是抽象的?

转载 作者:行者123 更新时间:2023-12-02 02:56:25 24 4
gpt4 key购买 nike

当我看到 Iterable 接口(interface)源代码时,它看起来像 foreach方法和Spliterator方法并不抽象。接口(interface)如何可以有非抽象方法?或者我在这方面有什么遗漏的吗?请参阅Iterbale接口(interface)源码如下。

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,您可以定义 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 源代码。

关于java - 为什么Iterable接口(interface)中的forEach方法不是抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com