Spliterator.OfInt中tryAdvance的奇怪实现

Naz*_*kyi 2 java lambda java-8 spliterator

它是如何工作的?怎么可以Consumer<? super Integer>演员IntConsumer

default boolean tryAdvance(Consumer<? super Integer> action) {
    if (action instanceof IntConsumer) {
        return tryAdvance((IntConsumer) action);
    }
    else {
        if (Tripwire.ENABLED)
            Tripwire.trip(getClass(),
                      "{0} calling Spliterator.OfInt.tryAdvance((IntConsumer) action::accept)");
        return tryAdvance((IntConsumer) action::accept);
    }
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*etz 5

强制转换为绑定方法引用提供了一个目标类型action::accept,它等同于lambda x -> action.accept(x).在IntConsumer目标类型导致此拉姆达(其宁愿接受的整数),以适应于接受一个int(这将导致参数传递到之前被隐盒装action.accept()).