刘小路1992 2022-05-07 14:58 采纳率: 100%
浏览 46
已结题

关于lambda表达式的一些疑问

@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
}

  • 写回答

1条回答 默认 最新

  • 猫巳 Java领域优质创作者 2022-05-07 15:25
    关注
    (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。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月15日
  • 已采纳回答 5月7日
  • 创建了问题 5月7日