Supplier
Guava Functional中的Supplier是通过给定的类型返回一个对象或者创建对象,即用作创建对象。
package com.google.common.base;
@GwtCompatible
@FunctionalInterface
public interface Supplier<T> extends java.util.function.Supplier<T> {
@CanIgnoreReturnValue
T get();
}
Suppliers类,Supplier接口的默认实现类,主要关注get方法。
package com.google.common.base;
@GwtCompatible
public final class Suppliers {
private Suppliers() {
}
/**
* 传入一个Guava function<F, T>与supplier<F>,将supplier.get的F变量通过function返回T
* 使用(以匿名类演示,也可以使用lambda实现):
* Suppliers.compose(new Function<String, Integer>() {
* @Nullable
* @Override
* public Integer apply(@Nullable String input) {
* Preconditions.checkNotNull(input);
* return input.length();
* }
* }, new Supplier<String>() {
* @Override
* public String get() {
* return "xucc";
* }
* });
*/
public static <F, T> Supplier<T> compose(Function<? super F, T> function, Supplier<F> supplier) {
// function、supplier为null抛出NullPointerException异常
Preconditions.checkNotNull(function);
Preconditions.checkNotNull(supplier);
return new SupplierComposition<F, T>(function, supplier);
}
private static class SupplierComposition<F, T> implements Supplier<T>, Serializable {
final Function<? super F, T> function;
final Supplier<F> supplier;
SupplierComposition(Function<? super F, T> function, Supplier<F> supplier) {
this.function = function;
this.supplier = supplier;
}
@Override
public T get() {
// 类型转换
return function.apply(supplier.get());
}
@Override
public boolean equals(@Nullable Object obj) {
if (obj instanceof SupplierComposition) {
SupplierComposition<?, ?> that = (SupplierComposition<?, ?>) obj;
return function.equals(that.function) &&
supplier.equals(that.supplier);