一. Supplier接口
顾名思义,这是一个供应商,提供者.就如一个工厂一样.该类的源码如下:
package java.util.function;
@FunctionalInterface
public interface Supplier<T> {
T get();
}
该接口就一个抽象方法get方法,该接口在 JAVA8之函数式接口返回实例篇中第一个示例就是利用的该接口.不用传入任何参数,直接返回一个泛型T的实例.就如同无参构造一样.示例就不再重复写了
supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new
例子:
public class TestSupplier {
private int age;
TestSupplier(){
System.out.println(age);
}
public static void main(String[] args) {
//创建Supplier容器,声明为TestSupplier类型,此时并不会调用对象的构造方法,即不会创建对象
Supplier<TestSupplier> sup= TestSupplier::new;
System.out.println("--------");
//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
sup.get();
//每次get都会调用构造方法,即获取的对象不同
sup.get();
}
}
===结果===
0
0
根据代码和官方注释,我的个人理解:
1.supplier是个接口,有一个get()方法
2.语法 :
Supplier<TestSupplier> sup= TestSupplier::new;
3.每次调用get()方法时都会调用构造方法创建一个新对象。
二. Consumer接口
顾名思义,这是一个消费者,该类的源码如下:
package java.util.function;
import java.util.Objects;
@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. accept方法
该函数式接口的唯一的抽象方法,接收一个参数,没有返回值.
2. andThen方法
在执行完调用者方法后再执行传入参数的方法.
3. 实例
package com.yczuoxin.demo.consumer;
import java.util.function.Consumer;
public class ConsumerTest {
public static void main(String[] args) {
Consumer<Integer> consumer = (x) -> {
int num = x * 2;
System.out.println(num);
};
Consumer<Integer> consumer1 = (x) -> {
int num = x * 3;
System.out.println(num);
};
consumer.andThen(consumer1).accept(10);
}
}
输出结果为:
可以看出先将10传入consumer方法执行,然后再将10传入consumer2方法执行.
三. 总结
这两个接口方法很少,但是实用性很强,并且可以看成是一对逆运算.一个作为生产工厂生产对象(Supplier),另一个作为消费者去消费对象(Consumer).