@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
}
(T t) -> { accept(t); after.accept(t); };
这个的意思可以换成常规格式
new Consumer<T>() {
@Override
public void accept(T t) {
Consumer.this.accept(t);
after.accept(t);
}
};
所以bb.accept在执行的时候相当于分别执行了aa.accept和andThen中的accept。