Guava Supplier&Suppliers 源码分析

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);
        	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值