【发布时间】:2017-05-31 15:27:19
【问题描述】:
和往常一样,我浏览了 JDK 8 的源代码,发现了非常有趣的代码:
@Override
default void forEachRemaining(Consumer<? super Integer> action) {
if (action instanceof IntConsumer) {
forEachRemaining((IntConsumer) action);
}
}
问题是:Consumer<? super Integer> 怎么可能是IntConsumer 的实例?因为它们处于不同的层次结构中。
我已经做了类似的代码 sn-p 来测试铸造:
public class InterfaceExample {
public static void main(String[] args) {
IntConsumer intConsumer = i -> { };
Consumer<Integer> a = (Consumer<Integer>) intConsumer;
a.accept(123);
}
}
但它会抛出 ClassCastException:
Exception in thread "main"
java.lang.ClassCastException:
com.example.InterfaceExample$$Lambda$1/764977973
cannot be cast to
java.util.function.Consumer
您可以在java.util.Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)找到此代码
【问题讨论】:
标签: java lambda java-8 classcastexception functional-interface