我一直在看的java FunctionalInterface java.util.function.Consumer具有源代碼java.util.function.Consumer andThen方法有效存儲器使用
package java.util.function;
import java.util.Objects;
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
所以如果我打電話consumer1.andThen(consumer2) ...和Then(consumerN).accept(); 在我看來,這有效地創造了消費者對象的N +(N-1)。請讓我知道,如果我用錯了,或者我不應該這樣使用它。
這是我的測試代碼來測試問題。我錯過了什麼?
public class Test1 {
public static int c = 0;
public static int acceptC = 0;
public Test1(){
++c;
System.out.println("new Object Created = "+c);
}
public void accept(int i){
acceptC++;
System.out.println("accept call "+ acceptC);
}
public Test1 andThen(Test1 after) {
return new Test1(){
@Override
public void accept(int i) {
acceptC++;
System.out.println("accept call in temp = " +acceptC) ;
Test1.this.accept(++i); after.accept(++i);
}
};
}
public static void main(String args[]){
Test1 t1 = new Test1();
Test1 t2 = new Test1();
Test1 t3 = new Test1();
Test1 t4 = new Test1();
Test1 t5 = new Test1();
t1.andThen(t2).andThen(t3).andThen(t4).andThen(t5).accept(0);
System.out.println("RESULT total Test Object created ="+Test1.c);
}
}
我得到的輸出將
new Object Created = 1
new Object Created = 2
new Object Created = 3
new Object Created = 4
new Object Created = 5
new Object Created = 6
new Object Created = 7
new Object Created = 8
new Object Created = 9
accept call in temp = 1
accept call in temp = 2
accept call in temp = 3
accept call in temp = 4
accept call 5
accept call 6
accept call 7
accept call 8
accept call 9
RESULT total Test Object created =9
我知道,除非你正在處理大量數據的方式.. 這並不重要了很多,但只是想知道