解析Consummer<T>函式式介面中的andThen方法
阿新 • • 發佈:2020-07-01
事例程式碼:
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。