函数接口—supplier

Metadata

title: 函数接口---supplier
date: 2023-02-21 08:42
tags:
  - 行动阶段/完成
  - 主题场景/程序
  - 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
  - 细化主题/Java/函数式编程
categories:
  - Java
keywords:
  - Java
description: Supplier 接口被称为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型数据。

函数接口—supplier

java.util.function.supplier<T>

简介

Supplier<T>接口被称为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型数据。

Supplier:包含一个无参的方法,所以是可以被@FunctionalInterface标识

  • T get():获取结果
    • 该方法不需要参数,它会按照某种实现逻辑(有Lambda表达式实现)返回一个数据
package java.util.function;

/**
 * Represents a supplier of results.
 *
 * <p>There is no requirement that a new or distinct result be returned each
 * time the supplier is invoked.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #get()}.
 *
 * @param <T> the type of results supplied by this supplier
 *
 * @since 1.8
 */
@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

作用

supplier一般作用是用来产生一个对象(调用一次get方法,返回一次T所代表的对象)
supplier用来创建对象的,它和常规new对象不同:

比如我们有个Person类,如果:
1、Person p1 = new Person();这里会马上创建一个对象
2、Supplier<Persion> s1 = Persion::new;这里不会创建对象
Persion p1 = s1.get(); 这里会创建一个对象,而且会返回Persion对象
Persion p1 = s1.get(); 继续创建一个Persion对象

示例

/*
   Supplier接口
   Supplier<T>:包含一个无参的方法
   T get():获取结果
   该方法不需要参数,它会按照某种实现逻辑(有Lambda表达式实现)返回一个数据
   Supplier<T>接口也称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会产生什么类型数据供我们使用
 */
public class SupplierDemo {
    public static void main(String[] args) {
        /*
        //匿名类写法
        Supplier<String> s= new Supplier<String>() {
              @Override
              public String get() {
                  return "iKun";
              }
          };
        System.out.println(getString(s));
         */
        //Lambda表达式写法
        System.out.println( getString(()->"iKun"));
    }
    //定义一个方法
     private static String getString(Supplier<String> s){
          return s.get();
     }

}