Java Consumer

Java Consumer

Consumer 是一个interface,有两个方法

  • accept
  • andThen

源码

1
2
3
4
5
6
7
8
9
10
11
@FunctionalInterface
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)};
}

}

使用

基础

1
2
3
4
5
6
new Consumer<String>(){
@Override
public void accept(String s){
todo()
}
}.accept("accepted")

由于 andThen()方法由default关键字,所以andThen()方法可以不重写.关于andThen(),下文再说.

andThen

可以看到 andThen 是传入一个Consumer 然后返回一个lambda表达式

1
2
3
4
5
6
7
8
9
class Consumer{

//..
default Consumer<T> andThen(Consumer< ? super T> after){
//...
return (T t) ->{accept(t);after.accept(t)};
}

}

相当于

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Consumer{

//..
default Consumer<T> andThen(Consumer< ? super T> after){
//...
Consumer<T> p = this;
return new Consumer<T>(){
@Override
public void accept(T t){
p.accept(t);
after.accept(t);
}
};
}

}

就是说,在andThen返回的这个Consumer上调用accept()的话会执行父Consumer的accept()回调,然后再执行after的accept()