java Supplier接口与示例

Java 8 中的 Supplier 是一个函数接口,无参数,返回值类型为泛型 T。Supplier 的使用比较简单,使用场景也比较单一。

通俗的来说Supplier相当于一个放东西的容器,你可以在这个容器里放一些没有入参的代码,然后返回T类型,当调用get()方法的时候才会去执行容器里的代码得到返回值。

一、supplier普通使用

示例代码1:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.function.Supplier;

public class MainServer {
    public static void main(String[] args) throws InterruptedException {
         Supplier<String> supplier = () -> {
            LocalDateTime localDateTime = LocalDateTime.now();
            DateTimeFormatter f1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            System.out.println("Supplier测试");
            return localDateTime.format(f1);
        };
        System.out.println("开始");
        System.out.println("当前时间:" + supplier.get());
        Thread.sleep(1000L);
        System.out.println("再次获取当前时间:" + supplier.get());
    }
}

输出:

开始
Supplier测试
当前时间:2022-04-20 09:39:24
Supplier测试
再次获取当前时间:2022-04-20 09:39:25

示例代码2:

import java.util.function.Supplier;

public class MainServer {
    public static void main(String[] args)  {
        Supplier<Double> randomValue = () -> Math.random();
        System.out.println("获取随机数:" + randomValue.get());
        System.out.println("再次获取随机数:" + randomValue.get());
    }
}

输出:

获取随机数:0.702892997077614
再次获取随机数:0.3871863980392035

二、supplier在工厂模式中使用

import java.util.function.Supplier;

public class MainServer {
    public static void main(String[] args)  {
        Dog dog1 = dogFactory(() -> new Dog("哈士奇"));
        Dog dog2 = dogFactory(() -> new Dog("牧羊犬"));
        System.out.println(dog1);
        System.out.println(dog2);
    }

    public static Dog dogFactory(Supplier<? extends Dog> supplier) {
        Dog dog = supplier.get();
        dog.setAge(1);
        return dog;
    }
}
public class Dog {
    private final String name;
    private  Integer age;

    public Dog(String name) {
        this.name = name;
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" + "name='" + name  + ", age=" + age + '}';
    }
}

输出:

Dog{name='哈士奇, age=1}
Dog{name='牧羊犬, age=1}

三、 Supplier 扩展类

在 Java 8 中,为了方便 Supplier 的使用,提供了指定类型的 Supplier,有 BooleanSupplier, DoubleSupplier, IntSupplier, LongSupplier

import java.util.Random;
import java.util.function.IntSupplier;

public class MainServer {
    public static void main(String[] args)  {
        IntSupplier intSupplier = () -> new Random().nextInt(10);
        System.out.println(intSupplier.getAsInt());
        System.out.println(intSupplier.getAsInt());
    }
}

输出:

0
9

参考:
Supplier Interface in Java with Examples
Java 8 Supplier 函数接口
java1.8之supplier理解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值