前言
今天有空整理一下Consumer<T> 接口的使用,一般用于回调中。
这里简单记录一下。
正文
Consumer<T>接口是java 1.8才有的,定义如下:
//java.util.function.Consumer
@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); };
}
}
Consumer是消费的意思。
Consumer<T>可以消费一个T类型(泛型)的数据,有accept和andThen两个方法。
accept 的使用
void accept(T t)
意为消费一个指定泛型的数据
demo片段
定义consumerLog方法
private void consumerLog(String name, Consumer<String> consumer ){
consumer.accept(name);
}
使用consumerLog方法
consumerLog("Hello", new Consumer<String>() {
@Override
public void accept(String s) {
Log.d(TAG, "accept 11 s : "+ s);
}
});
andThen 的使用
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
如果一个方法的参数和返回值全都是Consumer类型,那么就可以实现效果:
消费数据的时候,首先做一个操作,然后再做一个操作,实现组合,而这个方法就是Consumer接口中的default方法andThen
demo片段
定义consumerLog2方法
private void consumerLog2(String name, Consumer<String> consumer1,Consumer<String> consumer2 ){
consumer2.andThen(consumer1).accept(name);
}
使用consumerLog2
consumerLog2("World", new Consumer<String>() {
@Override
public void accept(String s) {
Log.d(TAG, "accept 22 s : "+ s);
}
}, new Consumer<String>() {
@Override
public void accept(String s) {
Log.d(TAG, "accept 33 s : "+ s);
}
});
参考文章
© 版权声明