1. 程式人生 > 實用技巧 >解析Consummer<T>函式式介面中的andThen方法

解析Consummer<T>函式式介面中的andThen方法

事例程式碼:

1 public static void main(String[] args) {
2         Consumer<Integer> consumer = x -> System.out.println(x);
3         Consumer<Integer> consumer2 = x -> {
4             int a = x + 4;
5             System.out.println(a);
6         };
7         consumer.andThen(consumer2).accept(10);
8 }
Consumer中andThen程式碼:
1   default Consumer<T> andThen(Consumer<? super T> after) {
2         Objects.requireNonNull(after);
3         return (T t) -> { accept(t); after.accept(t); };
4     }

輸出結果:

當時學習的疑惑:為什麼consumer.andThen(consumer2).accept(10);先執行的是accept(10),是不是有一個accept()被吞了?後來認真一看,原來addThen方法返回的是Comsumer<T>這才恍然大悟。

解析:

consumer.addThen(consumer) 返回的是一個consumer物件,當繼續執行accpt(10)的時候,它得到了一個為10的引數,相當於accpt(10)是一個開始的標誌,

接著就會執行accept(10)----System.out.println(10),

affter.accept(10)----a = 10+4;System.out.println(14)

所以最後輸出就是14。