记录一次阅读源码疑问
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
//这个accept为什么没有循环调用,按照正常理解,表达式里面accept(t)调用的还是自己的 accept
return (T t) -> { accept(t); after.accept(t); };
}
}
public void test () {
Consumer<Number> aa = new Consumer<Number>() {
@Override
public void accept(Number number) {
}
};
Consumer bb = aa.andThen(new Consumer<Number>() {
@Override
public void accept(Number number) {
}
});
bb.accept(1); //此时先调用 bb lambda表达式里面的accept, 然后accept 又调用了 accept,这个不是调用bb 自己的accept了吗,为啥会调用aa的accept
}
按照常规理解bb.accept() 应该死循环了,实验发现并没有
将lambda换成常规写法应该是以下这样,默认调用的外部指针
new Consumer<T>() {
@Override
public void accept(T t) {
Consumer.this.accept(t);
after.accept(t);
}
};
网友评论